文章来源本人的博客:http://codelifeliwan.github.io/ 转载请注明出处
查看[设计模式]系列内容请点击:https://www.jianshu.com/nb/45937362
所有的设计原则无非是从以下几个出发点考虑:
降低不同模块之间耦合度
- 减少代码
- 方便多人开发
- 保护数据
1、单一职责原则
定义:
一个类应该只有一个职责
理解:
比如A类是一个处理业务逻辑的类,当B类要使用A类的某个方法时必须包含加载A类中的所有方法,若A类中的无关的方法过多则会造成一定的资源浪费,同时增加类的复杂度等。
应用:
最常见的应用是在进行数据库操作的时候数据库访问层和业务逻辑层的分开:负责数据库访问的类只负责数据库访问,完全不关心外界的逻辑处理,而负责逻辑处理的类只负责逻辑处理而不关心数据库到底是如何访问的。
2、里氏替换原则
定义:
所有使用父类的地方都应该能够替换成其子类,并且替换以后不会产生任何异常,反之不成立
理解:
在Java语言中普遍使用的继承机制,不难理解
好处:
- 代码共享
- 提高代码的可重用性
- 提高代码可扩展性
- 提高项目或产品开放性
缺点:
- 继承则必须拥有父类所有属性和方法
- 降低代码灵活性
- 增强耦合性,父类一旦修改,子类可能也需要做相应大片修改
3、依赖倒置原则
定义:
有以下两层含义:
- 高层模块不应该依赖底层模块,两者都应该依赖于其接口,即面向接口编程而不是面向对象编程
- 抽象不依赖于细节实现,细节应该依赖于抽象,即接口需要规定细节实现的部分而完全不管具体的细节是如何实现
应用:
司机开车:司机需要开车,那么对于总体来说,司机既可以开宝马也可以开奔驰,但是完全不依赖于开什么车。同样,宝马可以被司机A开也可以被司机B开,宝马的制造商只需要让它能被人开而完全不需要管到底是被谁开(兰博基尼除外)。它们之间通过统一规范接口进行连接:即司机要开车,车要被司机开。
4、接口隔离原则
定义:
客户端不应该依赖它不使用的接口。
类间的依赖关系应该建立在最小的接口上
理解:
若A类继承了B和C接口,但是A类只需要B接口,那么A类也必须实现C接口的所有方法,会造成问题,这条侧重于类和接口的关系。
类之间的依赖关系也需要最少,不需要的方法也去掉,这条侧重于接口内的方法数量。
应用:
电子商务系统中,门户类只需要查询方法,那么提供给门户类的接口中只需要有查询方法,而管理后台类需要增、删、查改的方法,那么提供给管理后台的接口则需要这四个方法,用到什么提供什么,用不到的坚决不要。
5、迪米特法则
定义:
一个对象应该对其他对象尽可能少的了解
理解:
只与你最直接的朋友通信
不要和陌生人说话
每个类对其他类都只需要最少的了解,保护“隐私”不被偷窥和破坏
应用:
若有三个类A、B和C,且A和B是相关类,B和C也是相关类,A和C毫无关系,那么A若想与C通信就必须经过B类的“介绍”才行。
6、开闭原则
定义:
一个软件实体或者类应该对扩展开放,对修改关闭
开闭原则通过以下几个方面来体现:
- 提高复用性:所有逻辑都是从原子逻辑组合而来,而不是在一个类中单独实现一个业务逻辑,代码粒度越小,被复用的可能性就越大,通过扩展避免相同的逻辑重复增加
- 提高可维护性:软件投产后维护过程应该尽可能扩展类而不是直接修改类。
- 提高灵活性:扩展类实现新需求
- 易于测试:通过扩展类在苛刻的条件下进行测试
网友评论