design-pattern
##设计原则
- 封装变化。
- 针对接口编程,而不是针对实现编程。
- 多用组合,少用继承。
- 为交互对象之间的松耦合设计而努力。
- 开放-关闭原则(对扩展开放,对修改关闭)。
- 依赖倒置原则(要依赖抽象,不要依赖具体类)。
指导方针,帮助避免违反依赖倒置原则:- 变量不可以持有具体类的引用。
- 不要让类派生自具体类。
- 不要覆盖基类中已实现的方法。
- 最少知识原则(Least Knowledge,只和朋友交谈)。
就任何对象而言,在该对象的方法内,我们只应该调用属于以下范围的方法:- 该对象本身
- 被当作方法的参数而传递进来的对象
- 此方法所创建或实例化的任何对象
- 对象的任何组件
- Hollywood principle:”Don’t call me; I’ll call you.”
- 单一职责原则(Single responsibility principle)(一个类应该只有一个引起变化的原因)
依赖倒置原则
依赖倒置原则(Dependence Inversion Principle)是程序要依赖于抽象接口,不要依赖于具体实现。简单的说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合。
- 高层次的模块不应该依赖于低层次的模块,他们都应该依赖于抽象。
- 抽象不应该依赖于具体实现,具体实现应该依赖于抽象。
理性怀疑原则
模式本身非常有用,但是应该将他们用作一种思考问题的手段,而不是解决问题的处方。注意在使用模式的时候出现以下问题
错误 | 原因 |
---|---|
浮于表面 | 仅仅对低层情况有了一些肤浅的理解,就草草选择一个模式 |
偏见 | 对模式过于偏信。根据已经选定的模式/模型来解释所有数据,不愿意对自己的偏见有任何质疑 |
错选 | 不理解模式的适用背景和条件(对模式的分类关系理解不全),选择了错误的模式 |
削足适履 | 忽略了实际的、具体的实例行为中的例外情况,不符合模式中所表达的理论。建模出的对象过于僵硬,不符合实际情况 |
模式实现的具体方式应该由问题的本质、约束条件和需求等等决定,而不是根据你在某本模式书中碰巧看到的某个实现。