转载:http://www.cnblogs.com/maowang1991/archive/2013/04/15/3023236.html
阅读以上链接,关于设计模式的总结。
创建型:
简单工厂模式 工厂类的方法通过参数选择判断构建那个方法
工厂方法模式 一个工厂类多个创建方法
抽象工厂模式 多个工厂各自一个创建方法
单例模式 始终保持上下文一个实例, 注意构建时的线程安全
原型模式 复制对象
建造者模式 提供默认参数中某些默认属性值创建方法
结构型:
类的适配器模式:当希望将一个类转换成满足另一个新接口的类时,可以使用类的适配器模式,创建一个新类,继承原有的类,实现新的接口即可。
对象的适配器模式:当希望将一个对象转换成满足另一个新接口的对象时,可以创建一个Wrapper类,持有原类的一个实例,在Wrapper类的方法中,调用实例的方法就行。
接口的适配器模式:当不希望实现一个接口中所有的方法时,可以创建一个抽象类Wrapper,实现所有方法,我们写别的类的时候,继承抽象类即可。
装饰模式: 可以算作是一种独特的对象适配器模式,为装饰类扩展功能
代理模式: 也是一种独特的对象适配器模式, 为代理对象提供访问控制。 装饰模式和代理模式的区别主要在 对持有对象实现的逻辑, 前者属于扩展功能,后者控制对象访问。二者其实也不是很好划分
外观模式: 提供一系列形象的对外接口,因此内部组件的实现细节,使内部组件相互独立,关联小。如关闭电脑, 显示器关闭, cpu关闭,内存关闭,硬盘关闭, 使用的是组合思想
桥接模式:桥接模式就是把事物和其具体实现分开,使他们可以各自独立的变化。桥接的用意是:将抽象化与实现化解耦,使得二者可以独立变化,像我们常用的JDBC桥DriverManager一样,JDBC进行连接数据
库的时候,在各个数据库之间进行切换,基本不需要动太多的代码,甚至丝毫不用动,原因就是JDBC提供统一接口,每个数据库提供各自的实现,用一个叫做数据库驱动的程序来桥接就行了
装饰类和代理类的目的是针对一个对象进行操作, 桥接模式是为了替换实现
组合模式:部分-整体 实现统一操作, 整体有部分组合起来, 整体可追溯到每一个部分元素
享元模式:主要目的是实现对象的共享,即共享池,当系统中对象多的时候可以减少内存的开销,通常与工厂模式一起使用
行为型
策略模式:策略模式定义了一系列算法,并将每个算法封装起来,使他们可以相互替换,且算法的变化不会影响到使用算法的客户
模板模式:针对继承抽象类方式, 再抽象类实现了类的相同行为,同时留下相应抽象的方法供继承者实现,以便运行相同的行为, 调用子类独有的行为。
观察者模式: 对象间的依赖, 当一个对象变化时,其它依赖该对象的对象都会收到通知,并且随着变化!对象之间是一种一对多的关系。
外观模式:用户主动调用对外接口,引起内部组合对象调用 观察者模式: 等待关联对象发生变化,收到通知,引起内部聚合对象调用
迭代子模式: 1. 一个聚集对象的集合类 2. 一个遍历集合进项操作的类
责任链:有多个对象,每个对象持有对下一个对象的引用,这样就会形成一条链,请求在这条链上传递,直到某一对象决定处理该请求。
命令模式:发出命令者持有相应命令, 命令还有接受者信息, 接受者完成任务,所以需要三个对象, 发出命令者, 命令, 接受者。依赖关系如下: 发出命令者持有命令对象, 命令对象持有接受者
备忘录模式: 备份对象的原始值,组成元素: 原始类, 备忘类, 备忘录存储类
状态模式: 1、可以通过改变状态来获得不同的行为。2、同时通知依赖对象。 应用场景如权限控制
访问者模式: 访问者模式适用于数据结构相对稳定的系统,把数据结构和算法解耦。 元素: 被访问的数据结构, 访问者行为
中介者模式: 两个相互依赖的类, 将依赖关系交给第三方管理,实现两者独立开发。解决对象直接的交互
解释器模式:
(1)定义
给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。
①文法:即语法规则。在解释器模式中每一个语法都将对应一个解释器对象,用来处理相应的语法规则。它对于扩展、改变文法以及增加新的文法规则都很方便。
②解释器模式描述了如何为简单的语言定义一个文法,如何在该语言中表示一个句子,以及如何解释这些句子。
③在解释器模式中可以通过一种称之为抽象语法树(Abstract Syntax Tree, AST)的图形方式来直观地表示语言的构成,每一棵抽象语法树对应一个语言实例
设计模式有些实现上大同小异,难以区分, 如装饰模式和代理模式。 两者实现几乎一致。 设计模式还是针对具体场景,才能符合其名字。