前言
介绍设计模式的六大原则与模块分类
六大原则
1. 开闭原则
对扩展开放,对修改关闭,即软件实体应尽量在不修改原有代码的情况下进行扩展
2. 里氏替换原则
所有引用基类对象的地方能够透明地使用其子类的对象
是实现 开闭原则 的重要方式之一,在程序中尽量使用基类类型来对对象进行定义,而在运行时再确定其子类类型,对子类对象来替换父类对象
3. 依赖倒置原则
抽象不应该依赖具体类,具体类应当依赖于抽象
在程序中尽量使用抽象层进行编程,将具体类写在配置文件中。如果系统行为发生变化,只需要对抽象层进行扩展,并修改配置文件,无需修改原有系统的源代码,满足开闭原则的要求
4. 单一职责原则
一个类(大到模块,小到方法)只负责一个功能领域中的相应职责
5. 迪米特法则(最少知道原则)
一个软件实体应当尽可能少地与其他实体发生相互作用
需要注意:
- 在类的划分上,应当尽量创建松耦合的类,类之间的耦合度越低,越有利于复用
- 在类的结构设计上,每个类都应当尽量降低其成员变量和成员函数的访问权限
- 在类的设计上,只要有可能,一个类型应当设计成不变类。
- 对其他类的引用上,一个对象对其他对象的引用应当降到最低
6. 接口分离原则
使用多个专门的接口,而不使用单一的总接口
需要注意控制接口的粒度:
- 接口不能太小,如果太小会导致系统中接口泛滥,不利于维护
- 接口也不能太大
总结
里氏替换原则、依赖倒置原则是开闭原则的实现,结合6个原则看,我们在编程中最好都是抽象,低耦合,细微粒度
模式分类
- 创建型
- 主要用于描述如何创建对象
- 结构型
- 主要用于描述如何实现类或对象的组合
- 行为型
- 主要用于描述类或对象怎样交互及怎样分配职责
根据某个模式主要用于处理类之间的关系还是对象之间的关系,还可以分为:类模式、对象模式
经常将两种分类方式结合使用,如单例模式是对象创建型模式,模块方法模式是类行为型模式
1. 创建型
主要用于描述如何创建对象。将模块中对象的创建和对象的使用分离。外界只需要知道接口,不需要知道具体的实现细节,符合单一职责原则
- 简单工厂模式
- 工厂方法模式
- 抽象工厂模式
- 单例模式
- 生成器模式
- 原型模式
2. 结构型
主要用于描述如何实现类或对象的组合。
- 类结构型模式关心类的组合:由多个类组合成一个更大的系统,一般只存在继承关系和实现关系
- 对象结构型关心类与对象的组合:通过关联关系使得在一个类中定义另一个类的实例对象,然后通过该对象调用其方法。 根据“合成复用原则”,在系统中尽量使用关联关系来替代继 承关系,因此大部分结构型模式都是对象结构型模式。
- 外观模式
- 适配器模式
- 桥接模式
- 代理模式
- 装饰者模式
- 享元模式
3. 行为型
主要用于描述类或对象怎样交互及怎样分配职责
- 职责链模式
- 命令模式
- 解释器模式
- 迭代器模式
- 中介者模式
- 备忘录模式
- 观察者模式
- 状态模式
- 策略模式
- 模板方法模式
- 访问者模式