设计模式的原则

设计模式的七大原则:
1、开闭原则。对扩展开放,对修改关闭。
2、单一职责原则。一个类只负责系统中的某一项功能。
3、里氏替换原则。所有引用基类的地方都必须能够透明的使用其之类对象。
4、依赖倒置原则。依赖于抽象,但是不依赖于具体的实现。
5、接口隔离原则。类之间的依赖关系应该只建立在最小的接口上。
6、聚合复用原则。多用组合少用继承。
7、迪米特原则。每个类都应该尽量减少与其他类的依赖关系,减少耦合。

策略模式

常用示例:支付模块中根据不同商户类型来计算手续费。 Arrays.sort() 根据元素长度来采用不同的排序方法。

代码复用指的是二进制意义上的代码可以原封不动的重用。

定义一系列的算法,把它们封装起来,并使它们之间可以完全替换,该模式使得算法可以独立于使用它的客户程序(稳定)而变化(扩展变化)。在运行时支持各种算法之间的切换。

观察者模式

为某些对象建立一种通知机制,即一个对象发生变化,其他所依赖的对象都会得到通知。

定义对象之间的一种一对多(变化)的变化依赖关系,以便当对象的状态发生改变时,所有依赖的对象都能得到通知然后更新。

常用示例:上传进度条。

装饰模式

动态 (组合) 的给一个对象增加额外的职责,就某个对象增加功能而言,装饰模式比之类(继承)更加灵活(消除重复代码,减少子类个数)。

同时使用组合而非继承,实现了在运行时扩展对象功能的能力,而且可以扩展多个职责。接口上是is-a的关系,但是在实现上是has_a 的关系。装饰模式主要在于解决主体类在多个方向上的功能扩展问题。

常用示例:Java中的IO操作API接口,比如BufferedWriter、FilterInputStream、BufferedReader、FilterOutputStream。

工厂方法

通过对象创建模式绕开new来避免对象创建过程中的紧耦合。 面向接口编程。 依赖倒置。

定义一个用于创建对象的接口,让之类决定实例化哪一个类。 工厂方法使得一个类的实例化延迟到(解耦)到之类工厂中。

隔离使用者和创建者之间的紧耦合关系。创建对象延迟到之类中去实现,从而实现一种扩张的策略。这个缺点就是构建对象的参数必须一致。

抽象工厂

一系列相互依赖对象的创建工作。 常见示例有:数据库连接池的建立,相互依赖且有顺序关系。

单例模式

懒汉模式、饿汉模式、双重校验锁、枚举。 链接