单一职责原则(SRP)
就一个类而言,应该仅有要给引起它变化的原因(一个类只负责一个功能领域中的相应职责)
单一职责原则是实现高内聚、低耦合。
开放-封闭原则
是说软件实体(类、模块、函数等)应该可以扩展,但是不可修改
开放-封闭原则的两个特征
- 对于扩展是开放的(Open for extension)
- 对于更改是封闭的(Closed for modification)
要求:面对需求的改变可以保持相对稳定,从而使得系统可以在第一个版本以后不断退出新的版本。
开放-封闭原则是面向对象设计的核心所在,遵循这个原则可以带来面向对象技术所生成的巨大好处,即可维护、可扩展、可复用、灵活性好。
开发人员应该仅对程序中呈现出频繁变化的那些部分做出抽象,然而,对于应用程序中的每个部分都可以地进行抽象同样不是一个好主意,拒绝不成熟地抽象和抽象本身一样重要。
对程序的改动是增加新代码,而不是更改现有的代码
依赖倒转原则
- 高层模块不应该依赖低层模块,两个都应该依赖抽象
- 抽象不应该依赖细节,细节应该依赖抽象。
依赖倒转可以说是面向对象设计的标志,用哪种语言编写程序不重要,如果编写时考虑的都是如何针对抽象编程而不是针对细节编程,即程序中所有的依赖关系都是终止与抽象类或者接口,那就是面向对象的设计,反之,即为过程化设计。
强内聚,低耦合
里氏代换原则
一个软件实体如果使用的是一个父类的画,那么一定适用于其子类,而且它察觉不出父类对象和子类对象的区别,即,在软件里面,把父类都替换称它的子类,程序的行为没有变化。---子类必须能够替换掉其的父类。
合成复用原则
接口隔离原则(Interface Segregation Principle,IRP)就是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分,新对象通过向这些对象的委派达到复用已用功能的目的,简单的说,就是要尽量使用合成/聚合,尽量不要使用继承
Is—A:指一个类是另一个类的“一种”
Has—A:表示某一个角色具有某一项责任。
接口隔离原则
接口隔离原则(Interface Segregation Principle,ISP),指的是使用多个专门的接口比使用单一的总接口要好,也就是说不要让一个单一的接口承担过多的职责,而应把每个职责分离到多个专门的接口种,进行接口分离过于臃肿的接口是对接口的一种污染。
迪米特法则
迪米特法则(Law of Demeter,LOD)又叫最少知识原则(Leask Knowledge Principle,LKPI)指的是一个对象应当对其他对象有尽可能少的了解。也就是说,一个模块或对象应尽量少的与其他实体之间发生相互作用,使得系统功能模块相对独立,这样当一个模块修改时,影响的模块就会越少,扩展起来更加容易。
外观模式、中介者模式,使用了迪米特法则