1.设计原则
1、单一职责原则
就一个类而言,应该仅有一个引起它变化的原因。
如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者一直这个类完成其他的职责的能力。这种耦合会导 致脆弱的设计,当变化发生时,设计会遭受到意想不到的破会。
如果能够想到多于一个的动机去改变一个类,那么这个类就具有多于一个的职责。
2、开放--封闭原则
软件实体(类,模块,函数等)应该可以扩展,但是不可以修改。
对于扩展是开放的,对于更改是封闭的。
无论模块是多么‘封闭’,都会存在一些无法对之封闭的的变化。既然不可能完全封闭,设计人员必须对于他设计的模块应该对哪种变化封闭做出 选择。必须先猜测出最优可能发生的变化种类,然后构造抽象来隔离那些变化。
开放--封闭原则是面向对象设计的核心所在。遵循这个原则使得代码可维护,可扩展,可服用,灵活性好。开发人员应该仅对程序中呈现出频繁 变化的那些部分作出抽象,然而,对于应用程序中的每个部分都刻意地进行抽象同样不是一个好主意。拒绝不成熟的抽象和抽象本身一样重要。
3、依赖倒转原则
3.1 高层模块不应该依赖低层模块。两个都应该依赖抽象。
3.2 抽象不应该依赖细节。细节应该依赖抽象
里氏代换原则:子类型必须能够替换掉他们的父类型。
只有当子类可以替换掉父类,软件单位的功能不受到影响时,父类才能真正被复用,而子类也能够在父类的基础上增加新的行为。
正是由于子类型的可替换性才使得使用父类类型的模块在无需修改的情况下就可以扩展。
4、迪米特法则
如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个类的某一个方法的话,可以通过第 三者转发这个调用。
迪米特法则首先强调的前提是在类的结构设计上,每一个类都应当尽量降低成员的访问权限。
迪米特法则的根本思想是强调了类之间的松耦合。
5、合成/聚合复用原则
尽量使用合成/聚合,尽量不要使用类继承。
聚合表示一种弱的‘拥有’关系,体现的是A对象可以包含B对象,但B对象不是A对象的一部分;合成则是一种强的‘拥有关系’,体现了严格的部分和整体关系,部分和整体的生命周期一样。
优先使用对象的合成/聚合将有助于你保持每个类被封装,并被集中在单个任务上。这样的类和类继承层次回保持较小规模,并且不太可能增长为不可控制的庞然大物。
———《大话设计模式》