大话设计模式看了两遍,之前看过一遍,理解的不深刻, 这次用了一个月多点的时间再次温习,利用下班后的时间回来学习,把学习心得记录下来,加深了对面向对象的理解
之前是看到一个需求搞清楚业务流程之后立刻就去做了,很少从设计层面的角度考虑,现在在开发程序时,开始有了设计的思想,也有了达到可维护,可复用,可扩展目的具体的实现方法
每当看到经过优化代码的效果时,就想起一句话:精彩的代码是如何想出来的,比看到精彩的代码更加令人兴奋
下面是用自己的话进行的总结,以便加深记忆和理解
定义:提供一个创建对象的接口,而无需指明具体的类
目的: 创建不同等级的一族产品
案例: 2 厢车和 3 箱车, 都有 2.0 排量和 3.0 排量的两种类型
定义:将对象的构建和表示分离,使得同样的构建构成可以产生不同的表示
目的: 把对象的属性和行为分离出来,可以自由组合
案例: 建造楼房顺序是打桩,搭架子,但完工后房子是各有特色
定义:定义一个创建对象的接口,让子类决定实例化哪一个类
目的:延迟对象的实例化
案例:大学生和志愿者都乐于助人,他们统称为雷锋
定义:通过拷贝原型实例,通过解读字节码创建新的对象
目的:隐藏了创建对象的复杂性
案例:实现java的Cloneable接口,重写Object类的clone()
定义: 保证一个类只有一个实例,并提供一个全局访问点
目的:从外部不能new对象
案例:serlvet
定义: 使得由于接口不兼容的类能在一起工作
目的: 适配不能直接用的东西
案例: 各国的电压不一样,但是一样的笔记本照样可以充电
定义:抽象部分与它的实现分离
目的:使系统可以多维度的变化
案例:手机由硬件和软件组成, 硬件和软件又可以独立的变化
定义:将对象组合成树形的组织结构
目的:使整体和部分被同等的对待
案例:总公司和分公司都有人事部门
定义:动态的添加功能
目的:在某一种业务需求下,通过合成/聚合的方式增加类的灵活性
案例:IO系统
定义:为一组接口提供一个一致的界面
目的:提供简单的对外功能调用方式
案例:基金经理
定义:支持细粒度的对象
目的:减少相似的开销
案例:博客和论坛的两种形式
定义:隐藏对真实的访问
目的:控制对对象的访问,并能处理其他事情
案例:班主任让班长通知大家开会
定义:一个对象发生变化,依赖于它的对象都会得到通知并自动更新
目的:使得一系列相互协作的类解耦合
案例:公司前台通知老板回来了,正在聊天的同事,开始投入工作中
定义:定义一个算法的骨架,将部分细节实现延迟到子类
目的:不改变高层的步骤,而使部分步骤发生变化
案例:学生抄写题目,并写答案
定义: 将请求封装成对象,从而支持排队,撤销等
目的:将功能封装成对象
案例:去饭店吃烤串
定义:当对象的内部状态改变时,允许改变其行为
目的:将特定状态的行为放入一个对象中
案例:开灯和关灯
定义:将多个对象连成一条链,沿着该条链传递请求,直到得到处理
目的:多个对象都有机会处理请求,解除发送者和接收者的耦合
案例:经理可以批准请假, 它的上级是总监,总监可以批准涨工资
定义:定义一个语言的文法表示,并定义一个解释器
目的:把复杂的功能分离开,并把这些功能组合成需要解释执的抽象语法树,在解释执行
案例:输入a+b,在定义a和b的值,最后得出结果
定义:用一个对象封装一系列的对象交互
目的:使得对象之间不需要显示的引用
案例:联合国调停美国和伊拉克的问题
定义:在不改变元素的前提下,定义元素的新操作
目的:把元素封装成对象,和作用于元素上的操作接偶尔
案例:男人和女人谈恋爱,男人的状态和女人的状态
定义:定义算法分别封装起来,让他们之间可以相互替换,让算法的变化,不会影响到使用算法的客户
目的:把所需的功能按正确的顺序串联起来进行控制
案例:穿衣服的顺序
定义:在不破坏封装的前提下,捕获对象的状态
目的:使得状态可以可恢复
案例:看电子书,保存的书签
定义:在不暴露对象的前提下,顺序访问一个聚合对象中的各个元素
目的:在客户访问类与容器体之间插入一个迭代器
案例:售票员一个一个的询问乘客是否买票
原文:http://www.cnblogs.com/liuconglin/p/6528129.html