设计模式23种小结
2014-02-17 20:44
120 查看
六大设计原则:
Interface Segregation Principle (ISP) - OO设计的接口分隔原则(建立单一接口,不要建立臃肿庞大的接口)
Dependency Inversion Principle (DIP) - OO设计的依赖倒置原则(在高层模块与低层模块之间,引入一个抽象接口层)
Liskov Substitution Principle (LSP) - OO设计的里氏替换原则(任何基类出现地方都可以用子类替代反正不一定)
Composition/Aggregation Principle(CARP)- 00 设计合成/聚合复用原则(首先考虑组合聚合,而非继承)
Law of Demeter(LoD or LDP)– 00 设计迪米特法则(一个对象尽可能少耦合其它对象)
--说明插图太麻烦,不能直接拷贝
1) 代理模式(Proxy)
场景:充当真实对象的代理,代理和真实对象具有相同接口,屏蔽对真实对象的直接调用,客户端透明引用。常见代理有
a) 远程代理:可以通过直接调用本地代理实现对远程对象的调用
b) 保护代理:如果权限验证
类图如下:
2) 单态模式(Singleton)
场景:只能产生一个对象都是 private构造函数阻止外部生成对象,只能通过内部构造对象,静态引用
a) 饿汉式:每次类加载时候,产生对象。private static EagerSingleTon singleton = new EagerSingleTon();
b) 懒汉式:static synchronized getInstance() 方法中用到时候,再去构建。
3) 工厂模式(factory)
场景:屏蔽具体产品的产生细节,对子类可以动态扩展,透明调用。复合 “开-闭“原则,添加开放,修改关闭。当有新产品加入时候,无需对现有代码进行更改。
a) 简单工厂(静态工厂):通过简单工厂中 静态方法中参数生成不同对象。
b) 工厂方法:将产品抽象,工厂抽象,当需要添加一个新产品时候,需要添加相应具体工厂,不用修改客户端,抽象工厂接口以及其它角色。开-闭原则
c) 抽象工厂:出现多个产品族后,就要从另一个不同点抽象,以该抽象点再抽象出工厂
简单工厂:
工厂方法:
抽象工厂:
4) 适配器模式(adapter)继承类或持有引用
场景:已有类功能满足客户需求,但是接口不满足客户调用,需要将已有类接口转换为满足客户端调用接口。
5) 装饰模式(Decorator)
场景:当需要对个别对象添加额外职责,可以用装饰模式,比继承更具灵活性。动态添加职责,并且可以动态撤销,基本功能的排列组合,使得类继承变得不现实。
6) 策略模式(Strategy)
场景:如果一个系统中有许多类,仅仅在于行为的不同,可以使用一个对象进行动态选择行为,而将许多行为算法是一个个具体实现策略类,这个对象只需要持有抽象策略类引用即可。如果一个对象有许多行为并且用多重条件语句判断,可以考虑使用策略模式。降得耦合关系,使得一个个策略实现类动态扩展,易于维护。
7) 模版模式(Template)
场景:抽象父类固定一系列抽象模版办法,由子类去实现具体一系列模版方法这一系列抽象操作会被一个模版方法调用组成固定逻辑。基于继承的代码复用技术。一系列步骤称为基本方法(primitive method),由模版方法(templateMethod)回调将这些基本方法组成一个固定逻辑。
8) 观察者模式(Observer)
场景:当一个对象中状态变化,某些其它对象状态要做相应改变。既要保持对象间低耦合,又要保持动作高度协调一致,观察者模式就是最合适的设计方案。
9) 桥接模式(bridge)
场景:符合“开-闭“,“组合/聚合复用”原则,将抽象与行为分离,脱耦后各自独立变化。抽象持有行为接口,通过抽象调用行为接口的方法实现。使抽象与行为任意搭配,增加系统扩展的灵活性。
10) 建造者模式(Builder)
场景:工厂方法中无需了解产品是如何被创建的,但建造模式关注的各部分是如何创建的过程。也是多种调用顺序的组合。其实与模版方法类似,只是建造者模式是将模版方法替换为组装类。
11) 门面模式(Facde)
场景:为客户调用提供统一界面接口,目的是简化调用关系。与adapter类似,但是目的不同,adapter是适应客户端调用接口。
12) 享元模式(Flyweight)
场景:当系统中有大量对象,并且这些对象不可分辨,可以享元模式,可以用一个map,如果存在直接取出,如果为空,生成一个放进map,并且返回。
13) 克隆模式
场景:原型克隆新的对象,不需要知道具体拷贝细节。
14) 组合模式
场景:构造对象的树状结构,为外界提供统一访问接口。达到“部分-整体”模式。对于新添加子类可以扩展,但是如果添加行为组合模式不合适。
15) 责任链模式(chain of resposibility)
场景:该模式由一系列担当不同职责的对象组成,对象之间根据传递请求值不同完成不同职责,最终完成一个任务。多个对象处理一个请求,哪个对对象处理该请求运行时刻自动确定。(spring filter过滤器)
16) 状态模式(State)
场景:一个对象行为取决于其内部状态的改变。将各种状态抽象出接口,然后每个状态对应行为放到具体子类实现,通过顶层状态改变动态调用相应对象的行为。
17) 命令模式(Command)
场景:对专门调用过程加以封装的类,这种模式就是命令模式,可以实现命令队列。可以容易实现对命令Undo和Redo操作。发送者和接收者之间解耦,发送者不需要知道接收者调用接口。如平时用的菜单命令,属于命令模式,可以实现撤销操作。
18) 迭代模式(Iterator)
场景:提供一种顺序访问一个聚合对象中的各个对象,无需暴露它内部结构,为遍历不同聚合结构提供一个统一接口。
19) 中介者模式(Mediator)
场景:中介者定义一个对象来封装对象的交互行为,对象间关系解耦。对象不需要持有相互引用,想定义一个分布在各个类中行为,不需要生成多个子类。
Collegue通过Mediator调用ConcreteMediator实现两者的业务逻辑调用。所以ConcreteCollegueA,ConcreteCollegueB必须都在Mediator中注册。
20) 备忘录模式(Mementor)
场景:在不破坏封装性前提下,将对象内部状态保存在外部对象中,这样就可以将该对象恢复到以前的状态。
21) 解释器模式(Interpreter)
场景:按照预定语法数逻辑对于一个语句进行解释,只需要输入解释器会返回一个经过解释器逻辑处理的值。重复问题总是发生,考虑解释器模式。便于复用。效率不是首要考虑。如加法器,减法器。
22) 访问者模式(Vistor)
场景:在类层次结构中,如果父类增加行为,所有子类不得不跟着改动,为避免这些操作污染这些对象,其实只需要一个visitor将不得不改动行为包装,数据结构与行为的分离。符合开-闭原则。
OCP,ISP,DIP,LSP,CARP,LoD or LKP
The Open-Closed Principle (OCP) - OO设计的开闭原则(扩展开放,修改关闭)Interface Segregation Principle (ISP) - OO设计的接口分隔原则(建立单一接口,不要建立臃肿庞大的接口)
Dependency Inversion Principle (DIP) - OO设计的依赖倒置原则(在高层模块与低层模块之间,引入一个抽象接口层)
Liskov Substitution Principle (LSP) - OO设计的里氏替换原则(任何基类出现地方都可以用子类替代反正不一定)
Composition/Aggregation Principle(CARP)- 00 设计合成/聚合复用原则(首先考虑组合聚合,而非继承)
Law of Demeter(LoD or LDP)– 00 设计迪米特法则(一个对象尽可能少耦合其它对象)
--说明插图太麻烦,不能直接拷贝
1) 代理模式(Proxy)
场景:充当真实对象的代理,代理和真实对象具有相同接口,屏蔽对真实对象的直接调用,客户端透明引用。常见代理有
a) 远程代理:可以通过直接调用本地代理实现对远程对象的调用
b) 保护代理:如果权限验证
类图如下:
2) 单态模式(Singleton)
场景:只能产生一个对象都是 private构造函数阻止外部生成对象,只能通过内部构造对象,静态引用
a) 饿汉式:每次类加载时候,产生对象。private static EagerSingleTon singleton = new EagerSingleTon();
b) 懒汉式:static synchronized getInstance() 方法中用到时候,再去构建。
3) 工厂模式(factory)
场景:屏蔽具体产品的产生细节,对子类可以动态扩展,透明调用。复合 “开-闭“原则,添加开放,修改关闭。当有新产品加入时候,无需对现有代码进行更改。
a) 简单工厂(静态工厂):通过简单工厂中 静态方法中参数生成不同对象。
b) 工厂方法:将产品抽象,工厂抽象,当需要添加一个新产品时候,需要添加相应具体工厂,不用修改客户端,抽象工厂接口以及其它角色。开-闭原则
c) 抽象工厂:出现多个产品族后,就要从另一个不同点抽象,以该抽象点再抽象出工厂
简单工厂:
工厂方法:
抽象工厂:
4) 适配器模式(adapter)继承类或持有引用
场景:已有类功能满足客户需求,但是接口不满足客户调用,需要将已有类接口转换为满足客户端调用接口。
5) 装饰模式(Decorator)
场景:当需要对个别对象添加额外职责,可以用装饰模式,比继承更具灵活性。动态添加职责,并且可以动态撤销,基本功能的排列组合,使得类继承变得不现实。
6) 策略模式(Strategy)
场景:如果一个系统中有许多类,仅仅在于行为的不同,可以使用一个对象进行动态选择行为,而将许多行为算法是一个个具体实现策略类,这个对象只需要持有抽象策略类引用即可。如果一个对象有许多行为并且用多重条件语句判断,可以考虑使用策略模式。降得耦合关系,使得一个个策略实现类动态扩展,易于维护。
7) 模版模式(Template)
场景:抽象父类固定一系列抽象模版办法,由子类去实现具体一系列模版方法这一系列抽象操作会被一个模版方法调用组成固定逻辑。基于继承的代码复用技术。一系列步骤称为基本方法(primitive method),由模版方法(templateMethod)回调将这些基本方法组成一个固定逻辑。
8) 观察者模式(Observer)
场景:当一个对象中状态变化,某些其它对象状态要做相应改变。既要保持对象间低耦合,又要保持动作高度协调一致,观察者模式就是最合适的设计方案。
9) 桥接模式(bridge)
场景:符合“开-闭“,“组合/聚合复用”原则,将抽象与行为分离,脱耦后各自独立变化。抽象持有行为接口,通过抽象调用行为接口的方法实现。使抽象与行为任意搭配,增加系统扩展的灵活性。
10) 建造者模式(Builder)
场景:工厂方法中无需了解产品是如何被创建的,但建造模式关注的各部分是如何创建的过程。也是多种调用顺序的组合。其实与模版方法类似,只是建造者模式是将模版方法替换为组装类。
11) 门面模式(Facde)
场景:为客户调用提供统一界面接口,目的是简化调用关系。与adapter类似,但是目的不同,adapter是适应客户端调用接口。
12) 享元模式(Flyweight)
场景:当系统中有大量对象,并且这些对象不可分辨,可以享元模式,可以用一个map,如果存在直接取出,如果为空,生成一个放进map,并且返回。
13) 克隆模式
场景:原型克隆新的对象,不需要知道具体拷贝细节。
14) 组合模式
场景:构造对象的树状结构,为外界提供统一访问接口。达到“部分-整体”模式。对于新添加子类可以扩展,但是如果添加行为组合模式不合适。
15) 责任链模式(chain of resposibility)
场景:该模式由一系列担当不同职责的对象组成,对象之间根据传递请求值不同完成不同职责,最终完成一个任务。多个对象处理一个请求,哪个对对象处理该请求运行时刻自动确定。(spring filter过滤器)
16) 状态模式(State)
场景:一个对象行为取决于其内部状态的改变。将各种状态抽象出接口,然后每个状态对应行为放到具体子类实现,通过顶层状态改变动态调用相应对象的行为。
17) 命令模式(Command)
场景:对专门调用过程加以封装的类,这种模式就是命令模式,可以实现命令队列。可以容易实现对命令Undo和Redo操作。发送者和接收者之间解耦,发送者不需要知道接收者调用接口。如平时用的菜单命令,属于命令模式,可以实现撤销操作。
18) 迭代模式(Iterator)
场景:提供一种顺序访问一个聚合对象中的各个对象,无需暴露它内部结构,为遍历不同聚合结构提供一个统一接口。
19) 中介者模式(Mediator)
场景:中介者定义一个对象来封装对象的交互行为,对象间关系解耦。对象不需要持有相互引用,想定义一个分布在各个类中行为,不需要生成多个子类。
Collegue通过Mediator调用ConcreteMediator实现两者的业务逻辑调用。所以ConcreteCollegueA,ConcreteCollegueB必须都在Mediator中注册。
20) 备忘录模式(Mementor)
场景:在不破坏封装性前提下,将对象内部状态保存在外部对象中,这样就可以将该对象恢复到以前的状态。
21) 解释器模式(Interpreter)
场景:按照预定语法数逻辑对于一个语句进行解释,只需要输入解释器会返回一个经过解释器逻辑处理的值。重复问题总是发生,考虑解释器模式。便于复用。效率不是首要考虑。如加法器,减法器。
22) 访问者模式(Vistor)
场景:在类层次结构中,如果父类增加行为,所有子类不得不跟着改动,为避免这些操作污染这些对象,其实只需要一个visitor将不得不改动行为包装,数据结构与行为的分离。符合开-闭原则。
相关文章推荐
- JAVA23种设计模式小结以及设计原则归纳
- 23种设计模式小结
- 23种设计模式小结
- 23种设计模式
- java 23种设计模式之单例模式
- 23种设计模式(4):建造者模式
- 23种设计模式总结
- 23种设计模式----------工厂模式.
- Java开发中的23种设计模式详解
- java 23种设计模式详解01-02-03-工厂
- GoF23种设计模式之结构型模式之代理模式
- JAVA开发的23种设计模式之 --- 访问者模式
- 23种设计模式 - Pattern.
- 23种设计模式(9):命令模式
- 23种设计模式
- Java的23种设计模式----桥梁模式
- 面向对象设计思想与常见设计模式小结
- Java23种设计模式详解1——代理模式
- 23种设计模式之解释器模式
- 菜鸟柳--23种设计模式初学记录笔记(二)装饰者设计模式