首页 > 代码库 > 大话设计模式读书笔记--设计模式总结

大话设计模式读书笔记--设计模式总结

前言

大话设计模式看了两遍,之前看过一遍,理解的不深刻, 这次用了一个月多点的时间再次温习,利用下班后的时间回来学习,把学习心得记录下来,加深了对面向对象的理解

之前是看到一个需求搞清楚业务流程之后立刻就去做了,很少从设计层面的角度考虑,现在在开发程序时,开始有了设计的思想,也有了达到可维护,可复用,可扩展目的具体的实现方法

每当看到经过优化代码的效果时,就想起一句话:精彩的代码是如何想出来的,比看到精彩的代码更加令人兴奋

下面是用自己的话进行的总结,以便加深记忆和理解

创建型

抽象工厂

定义:提供一个创建对象的接口,而无需指明具体的类

目的: 创建不同等级的一族产品

案例: 2 厢车和 3 箱车, 都有 2.0 排量和 3.0 排量的两种类型

建造者模式

定义:将对象的构建和表示分离,使得同样的构建构成可以产生不同的表示

目的: 把对象的属性和行为分离出来,可以自由组合

案例: 建造楼房顺序是打桩,搭架子,但完工后房子是各有特色

工厂方法

定义:定义一个创建对象的接口,让子类决定实例化哪一个类

目的:延迟对象的实例化

案例:大学生和志愿者都乐于助人,他们统称为雷锋

原型模式

定义:通过拷贝原型实例,通过解读字节码创建新的对象

目的:隐藏了创建对象的复杂性

案例:实现java的Cloneable接口,重写Object类的clone()

单例模式

定义: 保证一个类只有一个实例,并提供一个全局访问点

目的:从外部不能new对象

案例:serlvet

结构性

适配器模式

定义: 使得由于接口不兼容的类能在一起工作

目的: 适配不能直接用的东西

案例: 各国的电压不一样,但是一样的笔记本照样可以充电

桥接模式

定义:抽象部分与它的实现分离

目的:使系统可以多维度的变化

案例:手机由硬件和软件组成, 硬件和软件又可以独立的变化

组合模式

定义:将对象组合成树形的组织结构

目的:使整体和部分被同等的对待

案例:总公司和分公司都有人事部门

装饰模式

定义:动态的添加功能

目的:在某一种业务需求下,通过合成/聚合的方式增加类的灵活性

案例:IO系统

外观模式

定义:为一组接口提供一个一致的界面

目的:提供简单的对外功能调用方式

案例:基金经理

享元模式

定义:支持细粒度的对象

目的:减少相似的开销

案例:博客和论坛的两种形式

代理模式

定义:隐藏对真实的访问

目的:控制对对象的访问,并能处理其他事情

案例:班主任让班长通知大家开会

行为型

观察者模式

定义:一个对象发生变化,依赖于它的对象都会得到通知并自动更新

目的:使得一系列相互协作的类解耦合

案例:公司前台通知老板回来了,正在聊天的同事,开始投入工作中

模板方法

定义:定义一个算法的骨架,将部分细节实现延迟到子类

目的:不改变高层的步骤,而使部分步骤发生变化

案例:学生抄写题目,并写答案

命令模式

定义: 将请求封装成对象,从而支持排队,撤销等

目的:将功能封装成对象

案例:去饭店吃烤串

状态模式

定义:当对象的内部状态改变时,允许改变其行为

目的:将特定状态的行为放入一个对象中

案例:开灯和关灯

职责连模式

定义:将多个对象连成一条链,沿着该条链传递请求,直到得到处理

目的:多个对象都有机会处理请求,解除发送者和接收者的耦合

案例:经理可以批准请假, 它的上级是总监,总监可以批准涨工资

解释器模式

定义:定义一个语言的文法表示,并定义一个解释器

目的:把复杂的功能分离开,并把这些功能组合成需要解释执的抽象语法树,在解释执行

案例:输入a+b,在定义a和b的值,最后得出结果

中介者模式

定义:用一个对象封装一系列的对象交互

目的:使得对象之间不需要显示的引用

案例:联合国调停美国和伊拉克的问题

访问者模式

定义:在不改变元素的前提下,定义元素的新操作

目的:把元素封装成对象,和作用于元素上的操作接偶尔

案例:男人和女人谈恋爱,男人的状态和女人的状态

策略模式

定义:定义算法分别封装起来,让他们之间可以相互替换,让算法的变化,不会影响到使用算法的客户

目的:把所需的功能按正确的顺序串联起来进行控制

案例:穿衣服的顺序

备忘录模式

定义:在不破坏封装的前提下,捕获对象的状态

目的:使得状态可以可恢复

案例:看电子书,保存的书签

迭代器模式

定义:在不暴露对象的前提下,顺序访问一个聚合对象中的各个元素

目的:在客户访问类与容器体之间插入一个迭代器

案例:售票员一个一个的询问乘客是否买票

  

 

大话设计模式读书笔记--设计模式总结