面向对象程序的设计原则

版权声明:本文为博主原创文章,未经同意不允许转载! https://blog.csdn.net/wb175208/article/details/84781630

1. 单一职责原则(SRP):就一个类而言,应该仅有一个引起它变化的原因。

由此可以推导出:一个函数甚至一个变量仅表示一个含义,不能表示多余一个的含义,否则就会在使用过程中出现歧义。

如果一个类承担的职责过多,就等于把这些职责耦合在一起了。一个职责的变化可能会削弱这个类完成其他职责的能力。

如何理解“职责”:可以把软件的职责看成变化的原因。如果有多种原因可以引起这个类发生变化,那么这个类就有多个职责。

一个DLL中的所有类对于同一类性质的变化应该是共同封闭的。一个变化若对一个DLL产生影响,则将对该DLL中的所有类差生影响,而对它的的DLL不造成任何影响。

2. 开放-封闭原则(OCP):软件应该对扩展开放,对修改封闭。
这个原则要求当软甲需要修改时,可以对模块进行扩展来满足要求,而不是修改原来的源代码。

开闭原则的关键是抽象。创建出一组描述可能行为的抽象基类。任何一个修改都是通过继承这个基类来实现扩展的。

3. 里氏替代原则(LSP):子类型必须能够替换掉它们的基类型。
也就是说任何一个基类型对象都可以直接替换成子类型对象而不用做任何的修改。

这个原则强调子类必须继承基类的所有方法,并且可以公开访问这些方法。子类对象替换掉基类对象后可以无差别的使用基类的所有函数。

子类对于基类是is-a关系,更是contains-a的关系。

4.依赖倒置原则(DIP):高层模块不应该依赖于底层模块,二者都应该依赖于抽象;抽象不应该依赖于细节,细节应该依赖于抽象。

在设计程序中通常会遇到这样的问题,创建一些高层模块依赖于底层模块、具体实现依赖于细节。这样就会造成问题,当底层模块的改动就会直接影响到高层模块,从而迫使依赖于它的高层做出相应的改动。

高层模块不应该依赖于底层模块,这种依赖结构相对于传统的依赖结构而言就是被“倒置”了。

本来是高层模块去影响底层的细节实现。包含于高层业务规则的模块应该优先独立于包含细节的底层模块。

高层模块独立于底层模块,那么高层模块就可以非常容易地被复用,这也是框架设计的基本原则。

抽象和细节被隔离,代码也非常容易维护。

5.接口隔离原则(ISP):如果类的接口不是内聚的,就表示该类具有“胖”接口,需要把多个接口分成多组方法。

这个原则要求不应该强迫客户依赖于它们不用的方法。

一般通过多继承的方式分离接口。

把“胖类”接口分解成多个特定于客户的接口,是每组接口仅仅被继承于需要继承这些接口的类。解除了客户端和它们没有调用的方法间的依赖关系,并且使客户之间互不依赖。

猜你喜欢

转载自blog.csdn.net/wb175208/article/details/84781630
今日推荐