面向对象设计的六大基本原则(设计模式6大原则)

时间:2021-01-11 20:16:02

原文地址: http://yanln.iteye.com/blog/1503862

1) 开闭原则: 

    即面向扩展开放,面向修改封闭,也就是说系统支持扩展,但是不支持修改。

    为什么这么做?

在开发阶段,我们都知道,如果对一个功能进行扩展,如果只是一味地对方法进行修改,可能会造成一些问题,诸如 可 能会引入新的bug,或者增加代码的复杂度,对代码结构造成破坏、冗余,还需要重新进行全面的测试。那么该怎么解决这些问题?很简单,这就需要系统能够支持扩展,只有扩展性良好的系统,才能在不进行修改已有实现代码的基础上,引进新的功能。

 

    我们应该怎么做?

要做到开闭原则,就需要多使用抽象类或者接口,将相似的类进行抽象,将公有的功能引入到抽象类中,这样在进行扩展时,只需要依据抽象类,生成新的子类即可。

 

2) 里氏代换原则:

    即任何使用基类的地方,都能够使用子类替换,而且在替换子类后,系统能够正常工作。

    为什么这么做?

采用里氏替代原则可以增强程序的健壮性,版本升级的时候可以保持非常好的兼容性,即使增加子类,原有的子类也可以继续运行。

    我们应该怎么做?

在引用基类的地方就能引用子类实现

 

 

3) 依赖倒转原则:

    即我们的client类要依赖于抽象,而不是依赖于具体,也就是我们经常听到的“要面向接口编程”。

    为什么这么做?

减少类间的耦合性,提高代码的可读性和可维护性。

    我们应该怎么做?

a、每个类尽量都有接口和抽象类,或者抽象类和接口都有。

b、变量的表面类型尽量是接口或者是抽象类。

c、任何类都不应该从具体类派生。(但是在做二次开发的时候,我们无法获得高层代码的时候例外),规则不是绝对的。

d、尽量不要覆写基类已经实现好的方法。

 

4) 接口隔离原则:

     即应该将接口粒度最小化,将功能划分到每一个不能再分的子角色,为每一个子角色创建接口,通过这样,才不会让接口的实现类实现一些不必要的功能。

    为什么这么做?

避免让接口的实现类实现一些不必要的功能

    我们应该怎么做?

建立单一的接口,不要建立臃肿的庞大的接口,也就是说接口的方法尽量少。

 

5) 迪米特法则:

    即尽量减少类之间的依赖关系.

    为什么这么做?

       降低类之间的耦合。

    我们应该怎么做?

       在应用中最直接的实现就是在两个类中间建一个中介类。但是这样可能会造成中介类的澎爆。

 

6) 合成/聚合复用原则:

    即少用继承,多用组合。

    为什么这么做?

优先使用对象的合成/聚合将有助于你保持每个类被封装,并被集中在单个任务上。这样类和类继承层次会保持较小规模,并且不太可能增长为不可控制的庞然大物。

    我们应该怎么做?

使用组合也就是将两个类之间建立关联关系,将一个类做为另一个类的属性。

继承与组合主要是区分两个角色之间是"is a"还是"has a"的关系,如果是"is a"就需要使用继承,而如果是"has a"就需要使用组合。

例如笔可以分为钢笔和油笔,这就是is a的关系,但是油笔与笔芯就是has a的关系。