面向对象设计的六大基本原则

面向对象设计的六大基本原则:

1)开闭原则

2)里氏代换原则

3)依赖倒转原则

4)接口隔离原则

5)迪米特法则

6)合成/聚合复用原则


依次解释六大基本原则:

1) 开闭原则: 

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

 为什么这么做?

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


 我们应该怎么做?

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


2) 里氏代换原则:

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

 为什么这么做?

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

 我们应该怎么做?

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



3) 依赖倒转原则:

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

 为什么这么做?

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

 我们应该怎么做?

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

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

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

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


4) 接口隔离原则:

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

 为什么这么做?

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

 我们应该怎么做?

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


5) 迪米特法则:

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

 为什么这么做?

       降低类之间的耦合。

 我们应该怎么做?

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


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

 即少用继承,多用组合。

 为什么这么做?

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

 我们应该怎么做?

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

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

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 单一职责原则 (SRP) 全称 SRP , Single Responsibility Principle 单一职...
    米莉_L阅读 1,790评论 2 5
  • 前言 关于设计模式六大设计原则的资料网上很多,但感觉很多地方解释地都太过于笼统化,特此再总结一波。 优化第一步-单...
    ghroost阅读 1,134评论 0 5
  • 前言 设计模式六大原则网上资料比较多比较乱,本文将网上的一些好的资料做一下整理,以便随时翻阅。友情提示,设计模式虽...
    简单的土豆阅读 1,452评论 0 10
  • 设计模式六大原则 设计模式六大原则(1):单一职责原则 定义:不要存在多于一个导致类变更的原因。通俗的说,即一个类...
    viva158阅读 783评论 0 1
  • 2017年国庆假期,凑巧国庆和中秋的双节,难得有长达8天的假期。早就订好全家一起出去游玩,地点是三亚。 前三天在家...
    看我的眼睛阅读 219评论 0 1