一、开闭原则
- 一个软件实体、如模块、类、函数,应该对修改关闭,对扩展开放。
二、里氏替换原则
继承的弊端:
如果一个类被其它类继承,当这个类需要修改时,必须考虑到所有子类,增加了对象间的耦合。
-
里氏替换原则是关于继承的原则;
-
任何父类可以出现的地方,子类一定可以出现。子类可以实现父类的抽象方法,尽量不重写覆盖父类的非抽象方法;
-
子类应该在父类的基础上扩展自己的功能;
三、迪米特原则(最少知道原则)
-
一个对象应该对其它对象保持最少的了解。(目的是降低对象间的耦合)
-
只与直接朋友通信:
- 出现在成员变量、方法参数、方法返回值中的类为直接朋友。
- 出现在局部变量中的类则不是直接朋友,尽量不产生相互调用关系,可通过中介类进行调用。
四、单一职责
- 一个类只负责一项职责,当修改一个功能时,可以显著降低对其它模块的影响。
五、接口分离原则
- 采用与特定客户有关的接口比采用一个通用的接口要好。
- 一个类对另一个类的依赖应该建立在最小的接口上,不要建立庞大臃肿的接口。(例如可以使用专用的Protocol)
六、依赖倒置原则
- 高层模块不应该依赖于低层模块,二者都应该依赖于抽象。
- 抽象不应该依赖于细节,实现细节应该依赖于抽象。
抽象:如Protocol、抽象类等
细节:具体实现类
七、组合/聚合复用原则
- 尽量使用组合/聚合的方式,而不是继承的关系达到软件复用的目的。
聚合:整体与个体的关系,整体与部分的生命周期可能不一致。(如班级与学生)
组合:比聚合关系强的关系,部分与整体的生命周期一致。(如猪和它的猪脚)