一、面向对象设计原则
- 单一职责原则(SRP)
- 开闭原则(OCP)
- 里氏替换原则(LSP)
- 依赖倒置原则(DIP)
- 接口隔离原则(LSP)
- 迪米特原则(LOP)
- 组合/聚合复用原则(CARP)
二、单一职责原则(SRP)
- 定义:系统中每一个类都应该中有一个职责
- 优点:高内聚、低耦合
- 高内聚是指一个类或者功能模块由相关性很强的代码组成,类或者模块很难拆分,它只负责一项任务
- 耦合指的是类之间或模块之间的相互联系,耦合度越高,说明联系越紧密,独立性越差,我们越难拆分相反,耦合度越低,联系越松散独立性越好,可重用的可能性越大
按照单一职责开发可以缩小单个类的规模,降低耦合度,并提高类的复用性
三、开闭原则(OCP)
- 对扩展开放,对修改关闭
优点:
- 适应必和灵活性
- 稳定性和延续性
- 可复用性与可维护性
四、里氏替换原则(LSP)
- 定义:在任何父类出现的地方都可以用其子类来替换且不影响功能。它是对开闭原则的扩展。
- 里氏替换原则所表述的就是在一个继承体系中的对象应该具有共同的外在特征。
- 里氏替换原则主张我们使用“抽象”和“多态”将设计中的静态结构改为动态结构。
- 对象的多态性其实就是最好的里氏替换原则的例子
五、依赖倒置原则(DIP)(控制反转)
- 定义:高层模块不应该依赖底层模块,两者都应该依赖抽象; 抽象不应该低速细节;细节应该依赖抽象。
- 接口负责公共方法的声明,抽象类负责公共方法的实现,和开闭原则相似,它们都是在程序增加新功能时不去修改原有的程序
- 面向接口编程
- 好处:提高程序的稳定性,可维护性,可扩展性。
六、接口隔离原则(LSP)
定义:使用多个专门的接口比使用单一的总接口要好
优点:不强迫新功能实现不需要的方法
七、迪米特原则(LOP)(最少知识原则)
定义:一个对象应当对其他对象尽可能少的了解,也尽可能的被更少的对象了解
当一个类需要调用另一个类的某个方法时,通过中介类实现
优点:降低耦合
缺点:过度使用,通信效率降低,产生大量的中介类
不能过度使用
八、组合/聚合复用原则(CARP)
定义:优先使用组合,使用系统更灵活,其次才考虑继承,达到复用的目的
优点:
- 组合复用所需要的依赖较少
- 组合复用可以在运行时间内动态进行,新对象可以动态的引用与成分对象类型相同的对象
缺点:使用组合利用建造的系统会有较多的对象需要管理