设计模式的目的
- 代码重用性(相同功能的代码,不用多次重复编写)。
- 可读性高(便于阅读和理解)。
- 可扩展性(很方便支持修改,可维护性高)。
- 可靠性(运行稳定不出错,新增功能对原有功能不影响)。
- 程序呈现高内聚低耦合的特性。
设计模式常用的七大原则:
- 单一职责原则
- 接口隔离原则
- 依赖倒转原则
- 里氏替换原则
- 开闭原则
- 迪米特法则
- 合称复用原则
1、单一设计原则
介绍
对类来说,即一个类只负责一项职责。
注意事项和说明
- 降低类的复杂度,一个类只维护一种职责
- 提高类的可读性,可维护性
- 降低变更引起的风险
- 类中方法足够少可以违反单一原则,类不用遵循单一原则,方法级别遵循单一原则即可。
2、接口隔离原则
介绍
- 客户端不应该依赖它不需要的接口,及一个类应该依赖最小接口。
3、依赖倒转
介绍
注意事项和说明
4、里氏替换原则
思考分析
- 父类已经实现好的方法,实际上是在设定规范和契约。虽然不是强制要求子类遵循这些锲约,但是如果子类对这些已经实现的方法任意的修改,就会对继承体系造成破坏。
- 继承是在给程序设计带来便利的同时,也带来了弊端。比如使用继承带来侵入性,程序可以移植性降低,增加对象间的耦合性。
介绍
-
如果每个类型为T1的对象O1.都有类型为T2的对象O2,使得以T1定义的所有程序P在所有的对象o1都迭代为o2时,程序的行为没有发生变化。那么T2是T1的子类型。
引用基类的地方必须透明的使用其子类对象
-
使用继承时子类尽量不要重写父类的方法。
-
里氏替换原则,继承实际上让两个类的耦合性增强了。在适当情况下,可以通过聚合,组合,依赖来解决问题。
注意事项和说明
在实际编程中,我们常常回通过重写父类的方法完成新的功能,这样写起来虽然简单,但是整个继承体系的复用性会比较差。特别是运行多态比较频繁的时候。
5、开闭原则
基本介绍
- 开闭原则是编程中最基本,最重要的设计原则。
- 一个软件的实现例如类,模块和函数应该对扩展开放,对修改关闭。用抽象构建框架,用实现扩展细节。
- 当软件需要变化时,尽量通过扩展软件实体的行为来实现变化。而不是通过修改已有的代码来实现变化。
- 编程中应该遵循其他设计原则,以及使用设计模式的目的就是遵循的开闭原则。
6、迪米特法则
基本介绍
-
一个对象应该对其他对象保持最少的了解。
-
类与类的关系越密切,耦合度越大。
-
迪米特法则(最少知道原则),一个类对自己依赖的类知道的越少越好。对于被依赖的类不管多么复杂,都因该尽量将逻辑封装在类的内部。
-
简化定义:只与直接朋友通信。
-
直接朋友?:每个对象都会有与其他对象有耦合关系,只要两个对象之间有耦合关系,我们就说这两个类之间是朋友关系。
耦合可能的方式
- 依赖
- 关联
- 组合
- 聚合
其中我们称出现成员变量,方法参数,方法返回值中的类为直接朋友,而在局部变量中的类不是直接朋友。
注意事项和细节
- 核心是降低类与类的依赖
- 注意:由于每个类之见减少了不必要的依赖,因此迪米特法则要求降低类间耦合关系,并没有要求依赖关系。
合成原则
基本介绍
原则是尽量使用合成/集合的方式,而不是使用继承。
设计原则核心思想
- 找出应用中可能需要变化之处,把他们独立出来,不要和那些不需要变化的代码混在一起。
- 针对接口编程,而不是针对实现编程。
- 为了交互对象之间的松耦合设计而努力。