设计模式
内聚:例程中操作之间联系的紧密程度
耦合:两个例程之间联系的紧密程度
一 行为模式
行为模式负责对象间的高效沟通和职责委派。封装行为的变化。
1.Strategy模式:
定义一系列的算法,把他们一个个封装起来,并且使他们可相互替换。Strategy模式使算法可独立于使用它的客户而变化。
意图: 可以根据所处上下文(Context),使用不同的业务规则或算法。
效果:
- Strategy模式定义了一系列算法
- 可以不使用switch语句或条件语句
- 必须以相同的方式调用所有算法(接口)
2.Observer观察者模式:
意图: 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知并自动更新。
二 结构型模式
结构型模式介绍如何将对象和类组装成较大的结构, 并同时保持结构的灵活和高效。
1. Facade(外观模式):
为子系统的一组接口提供一个统一接口(更简单的接口)。Facade模式定义了一个更高层的接口,使子系统更加容易使用。[为使用类B简化已有系统A]
- 不需要使用某复杂系统的所有功能
- 希望封装或隐藏原系统
- 希望在原系统功能的基础上增加新功能
- 编写新类的成本小于所有客户学会使用或者未来维护原系统所需的成本
2. Adapter(适配器模式):
将一个类的接口转换成客户希望的另外一个接口(统一接口)。Adapter模式使原本由于接口不兼容而不能一起工作的类可以一起工作。
[使已有的类A能够适配使用类B所需的接口]
源(Adaptee):已经存在的、需要适配的类。
目标(Target):客户所期待的接口。目标可以是具体的或抽象的类,也可以是接口。
适配器(Adapter):适配器模式的核心类。有两种方式实现Adapter,对象适配器(Object Adapter)和类适配器(Class Adapter)。
- 对象Adapter模式:委托
- 类Adapter模式:多重继承,Adapter继承Target和Adaptee
3.Bridge(桥接模式)
将抽象与其实现解耦,使他们都可以独立地变化。[允许一组相关的使用对象使用不同实现]
效果:
- 实现与使用实现的对象解耦,提供了可扩展性,客户对象无需操心实现问题。
4.Decorator(装饰模式)
意图: 动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式比生成子类更为灵活。
工作原理: 可以创建始于Decorator对象终于原对象的一个对象“链”。
三 创建型模式
创建型模式提供了创建对象的机制, 能够提升已有代码的灵活性和可复用性。
0.工厂准则
对象应该要么构造和/或管理其他对象,要么使用对象,而不应该兼有。
创建对象和使用对象分离。
工厂应该既关心使用哪些对象的规则,又需关心如何管理它们的规则,可能包括实例化多少对象,如何共享对象。
1.单例模式
意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点。
实现:
Singleton 单线程(私有构造函数,getInstance静态方法)
Double-Checked Locking 多线程(最小化临界区范围)
2.Factory Method工厂方法
意图: 定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。
3.抽象工厂
为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。[创造了相关对象(族)的集合]
四 设计模式原则
- 开闭原则:对扩展开放,对修改封闭。
- 依赖倒置原则:高层模块不应该依赖低层模块。他们都应该依赖于抽象。
Ref:
《设计模式解析》