设计模式要遵循基本的设计准则:
- 可维护性 软件能够被理解、改正、适应及扩展的难易程度
- 可复用性 软件能够被复用的难易程度
- 一个对象应该只包含单一的职责,并且该职责被完整地封装在一个类中
- 就一个类而言,应该仅有一个引起它变化的原因
设计软件系统中各模块时应注意高内聚和低耦合
- 高内聚: 职责相关性和集中度的度量
- 低耦合: 各模块建相互关联的度量
单一职责原则用于控制类的力度即大小
软件实体应对扩展开放,对修改关闭.该原则关键在于抽象化, 可为系统定义一个相对稳定的抽象层,将不同的实现行为放到具体的实现层中完成.
所有引用基类的地方必须能透明地使用其子类的对象 设计时,尽量使用基类类型来定义对象,运行时再确定子类类型.侧重于运行层面;运行时,确定实现类型
高层模块不应该依赖低层模块,它们都应该依赖抽象。抽象不应该依赖于细节,细节应该依赖于抽象。侧重于设计层面
- 要求针对接口编程,不要针对实现编程
- 用接口或抽象类来声明变量类型、参数类型声明、方法返回类型声明,以及数据类型转换等,而不要使用具体类来做这些事情
客户端不应该依赖那些它不需要的接口 接口不宜过大,应使每个接口仅承担一个相对独立的角色或功能,使用该接口的客户端仅需知道与之相关的方法即可。
优先使用对象组合,而不是通过继承来达到复用的目的
- 黑箱复用 - 对象组合
- 白箱复用 - 继承
也称最少知识原则,每一个软件单位对其他单位都只有最少的知识,而且局限于那些与本单位密切相关的软件单位
- 在类的划分上应尽量创建松耦合的类,类之间的耦合度越低,越有利于复用
- 类的结构设计上,每一个类都应该降低其成员变量和成员函数的访问权限