首页 > 代码库 > 面向对象原则

面向对象原则

设计原则 英文表达 说明
单一职责原则 SRP,Single Responsibility Principle 一个类,应该仅有一个引起你它变化的原因。不要讲变化原因不同的职责封装在一起,而应该分离。
开放封闭原则 OCP,Open Closed Principle 软件实体应当对修改关闭,对扩展放开。
依赖倒置原则 DIR,Dependency Inversion Principle 依赖于抽象,而不应该依赖于具体,因为抽象相对稳定。
接口隔离原则 ISP,Interface Inversion Principle 尽量应用专门的接口,而不是单一的总接口,接口应该面向用户,将依赖建立在最小的接口上。
Liskov替换原则 LSP,Liskov Substitution Principle 子类必须能够替换基其基类。

 

 

 

 

 

单一职责原则

核心思想:一个类,最好只做一件事,只有一个引起它变化的原因。

单一职责原则可以看做是低耦合高内聚在面向对象原则上的引申,将职责定义为引起变化的原因,以提高内聚性来减少变化的原因。

遵循这条规则的关键,并不是从功能点的多少来划分,而是从引起类变化的原因来把握。

可以通过Facade模式或Proxy模式进行职责分离。

 

开放封闭原则

核心思想:软件实体应该是可扩展,而不可修改的。也就是说对其扩展是开放的,对其修改是封闭的。

主要体现在两个方面:

对扩展开放,意味着有新的需求或变化时,可以对现有代码进行扩展,以适应新的需求。

对修改封闭,意味着类一旦设计完成,就可以独立完成其工作,而不要对类进行任何修改。

实现开放封闭的核心思想就是对抽象编程,而不是对具体编程,因为对抽象编程来说相对于稳定。

常用于实现的模式主要有Template Method模式和Strategy模式。

 

依赖倒置原则

核心思想:依赖于抽象

主要体现在:

高层模块不应该依赖于底层模块,二者都应该依赖于抽象。

抽象不应该依赖于具体,具体应该依赖于抽象。

依赖,一定会存在于类鱼类、模块与模块之间:依赖关系,也一定是系统设计必须关注的要点。面向对象设计在魔种层次上,就是一个关于关系处理的哲学,而依赖倒置原则正式这种哲学思想在具体应用中的体现。当两个模块之间存在紧耦合的关系时,最好的办法就是分离接口和实现:在依赖之间定义一个抽象的接口,使得高层模块调用接口的方法,而底层模块实现接口的定义,一次来有效控制耦合关系,达到依赖于抽象的设计目标

抽象的稳定决定系统的稳定性,因为抽象是保持不变的,依赖于抽象是面向对象设计的精髓,也是依赖倒置原则的核心思想。

依赖于抽象是一个通用的规则,而某些时候依赖于细节是在所难免的。必须权衡在首相和具体之间的取舍,方法不是一成不变的。

依赖于抽象,就是要对接口编程,不要对实现编程。

 

接口隔离原则

核心思想:使用多个小的专门接口,而不要使用一个大的接口。

主要体现在:

接口应该是内聚的,应该避免出现“胖”的接口。

一个类对另一个类的依赖应该建立在最小的接口上,不要强迫依赖不用的方法,这是一种接口污染。

分离手段主要有两种:

委托分离,通过增加一个新的类型来委托客户的请求,隔离客户和接口的直接依赖,但是会增加系统开销

多重继承分离,通过接口多继承来实现客户的需求,这种方式值得推荐。

对于接口的理解并不完全局限于程序语义上定义的接口概念,还代表了逻辑上的接口概念。程序语言上的接口,就像C#语言中的interface定义的数据类型接口,接口隔离要求interface仅提供客户需要的程序特征;而逻辑接上的接口,代表了方法特征的集合,也可能是一个新的类型。不管怎样,为每个客户实现特定的接口,是接口隔离原则的统一思想。

建议规则:

将功能相似的接口合并,可能造成接口污染,实现内聚的接口才是接口设计的基本原则。

接口隔离原则,能够宝成系统扩展和修改的影响不会扩展到系统的其他部分,一定程度上对开放粉笔原则的遵守。

 

面向对象原则