天天看点

设计模式六大原则之----迪米特、开闭原则(六大原则简单总结)

由于迪米特和开闭原则不具体写代码逻辑,同时,这两个原则部分思想是和前面的4个原则有重合部分,所以就在一起来回顾。

一、 迪米特原则

1. 定义

也叫最少知识原则,一个对象应该对其他对象有最少的了解,即一个类对自己需要耦合或者调用的类知道的最少。

2. 生活实例看代码

  • 生活实例:有些朋友间距离太近,无话不说,无所不知,类A和类B两个人配合非常默契,如果某一天其中一个人无法和另一个人配合,而用第三个人类C跟他一起工作协同的话,有可能会引起很多问题。
  • 保持距离的方法:将类B暴露给A的方法进行封装,暴露的方法越少越好,这样的话类B和类A实现低耦合,将类B替换为类C的时候就非常容易
  • 设计方法:一个类的public方法越多,修改时设计的范围也就越大,变更引起的风险也就越大,在系统设计时需要注意,能用private就用private,能用protected就用protected,能少用public就少用public,能加上fiinal就加上final。

3. 优缺点

  • 优点:类间解耦,弱耦合,耦合降低,复用率高
  • 缺点:类间的耦合性太低,会产生大量的中转或者跳转类,会倒置系统的复杂性提高,同时加大系统维护难度。

4. 例子

在Activity中需要保存一部分网络请求的数据。
  • 不遵循迪米特原则的方式
    • 在Actvity中调用数据存储的接口
    • 告知存储路径
    • 告知存储文件名
    • 告知存储到数据库中
    • 告知加密
  • 遵循迪米特原则的方式
    • 调用加密存储数据到数据库中的方法(调用者不需要知道接口内部的细节)

二、 开闭原则

1. 定义

一个软件的实体,如类、模块和函数等应该对扩展开放,对修改关闭。

2. 问题由来

2.1 问题

在软件的生命周期内,因为变化、升级和维护等原因需要对原有代码进行修改时,可能会给旧代码引入错误,更严重的还可能需要进行整个功能重构,原有逻辑需要重新测试,费时费力。

2.2 解决方案

通过扩展实现变化而不是通过修改实现变化。

3. 总结

开闭原则是面向对象设计中的最基础的设计原则:用抽象构建框架,用实现扩展细节。因为抽象灵活性好,适应性广,只要抽象的合理,就可以保持架构的稳定。而软件中的易变细节,我们从抽象类派生的实现类进行扩展即可实现。

前提是,抽象要合理,具有前瞻性和预见性。

三、六大设计原则的核心

用抽象构建架构,用实现扩展细节:

1. 单一职责原则:类职责要单一

2. 里氏替换原则:不要破坏继承体系

3. 依赖倒置原则:面向接口编程

4. 接口隔离原则:设计接口要精简单一

5. 迪米特原则:降低耦合度

6. 开闭原则;对扩展开放,对修改关闭

最后说明一下如何去遵守这六个原则。对这六个原则的遵守并不是是和否的问题,而是多和少的问题,也就是说,我们一般不会说有没有遵守,而是说遵守程度的多少。任何事都是过犹不及,设计模式的六个设计原则也是一样,制定这六个原则的目的并不是要我们刻板的遵守他们,而需要根据实际情况灵活运用。对他们的遵守程度只要在一个合理的范围内,就算是良好的设计。

继续阅读