设计模式之六大原则
2015-12-19 15:00
197 查看
1. 单一职责原则
就一个类而言,应该仅有一个引起变化的原因。即一个类只负责一项职责。
职责扩散:因为某种原因,职责p被分化为粒度更细的职责p1和p2,就可以会违背单一职责原则。
遵循单一职责原则的优点:
可以降低类的复杂度,一个类只负责一项职责,其逻辑肯定要比负责多项职责简单的多。
提高类的可读性,提高系统的可维护性;
变更引起的风险降低,变更是必然的。如果单一职责原则遵守的好,当修改一个功能时,可以显著降低对其他功能的影响。
2. 里氏代换原则
子类型必须能够替换掉它们的父类型。
理解:
一个软件实体如果使用的是一个父类的话,那么一定适用于其子类,而且它察觉不出父类对象和子类对象的区别。也就是说,在软件里面,把父类都替换为它的子类,程序的行为没有变化。只有当子类可以替换掉父类,软件单位的功能不受影响时,父类才能真正被复用,而子类也能够在父类的基础上增加新的行为。正是由于子类型的可替换性才使得使用父类类型的模块可以在无需修改的情况下就可以扩展。(正是有了里氏代换原则,开放-封闭原则才得以实现)
3. 依赖倒转原则
A. 高层模块不应该依赖低层模块。两个都应该依赖抽象。
B. 抽象不应该依赖细节。细节应该依赖抽象。
在java中,抽象指的是接口或者抽象类,细节就是具体的实现类,使用接口或者抽象类的目的是制定好规范和契约,而不去涉及任何具体的操作,把展现细节的任务交给他们的实现类去完成。
依赖倒转原则的核心思想是面向接口编程。
4. 接口隔离原则
客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。(一个类如果继承一个接口,那么这个接口里就应该只包括类需要的方法,不应该包括类不需要的方法,那么类就必须实现这些没用的方法,这就是接口臃肿)。
含义:建立单一接口,不要建立庞大臃肿的接口,尽量细化接口,接口中的方法尽量少。
注意:
接口尽量小,但是要有限度。对接口进行细化可以提高程序设计的灵活性,但是如果过小,则会造成接口数量过多,使设计复杂化。
为依赖接口的类定制服务,只暴露给调用的类它需要的方法,它不需要的方法则隐藏起来。只有专注地为一个模块提供定制服务,才能建立最小的依赖关系。
提高内聚,减少对外交互。
5. 迪米特法则
如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个类的某一个方法,可以通过第三者转发这个调用。
迪米特法则根本思想是强调了类之间的松耦合。
6. 开放-封闭原则
软件实体(类、模块、函数等)应该可以扩展,但是不可以修改。
特性:一是对扩展开放的;二是对修改封闭的。
就一个类而言,应该仅有一个引起变化的原因。即一个类只负责一项职责。
职责扩散:因为某种原因,职责p被分化为粒度更细的职责p1和p2,就可以会违背单一职责原则。
遵循单一职责原则的优点:
可以降低类的复杂度,一个类只负责一项职责,其逻辑肯定要比负责多项职责简单的多。
提高类的可读性,提高系统的可维护性;
变更引起的风险降低,变更是必然的。如果单一职责原则遵守的好,当修改一个功能时,可以显著降低对其他功能的影响。
2. 里氏代换原则
子类型必须能够替换掉它们的父类型。
理解:
一个软件实体如果使用的是一个父类的话,那么一定适用于其子类,而且它察觉不出父类对象和子类对象的区别。也就是说,在软件里面,把父类都替换为它的子类,程序的行为没有变化。只有当子类可以替换掉父类,软件单位的功能不受影响时,父类才能真正被复用,而子类也能够在父类的基础上增加新的行为。正是由于子类型的可替换性才使得使用父类类型的模块可以在无需修改的情况下就可以扩展。(正是有了里氏代换原则,开放-封闭原则才得以实现)
3. 依赖倒转原则
A. 高层模块不应该依赖低层模块。两个都应该依赖抽象。
B. 抽象不应该依赖细节。细节应该依赖抽象。
在java中,抽象指的是接口或者抽象类,细节就是具体的实现类,使用接口或者抽象类的目的是制定好规范和契约,而不去涉及任何具体的操作,把展现细节的任务交给他们的实现类去完成。
依赖倒转原则的核心思想是面向接口编程。
4. 接口隔离原则
客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。(一个类如果继承一个接口,那么这个接口里就应该只包括类需要的方法,不应该包括类不需要的方法,那么类就必须实现这些没用的方法,这就是接口臃肿)。
含义:建立单一接口,不要建立庞大臃肿的接口,尽量细化接口,接口中的方法尽量少。
注意:
接口尽量小,但是要有限度。对接口进行细化可以提高程序设计的灵活性,但是如果过小,则会造成接口数量过多,使设计复杂化。
为依赖接口的类定制服务,只暴露给调用的类它需要的方法,它不需要的方法则隐藏起来。只有专注地为一个模块提供定制服务,才能建立最小的依赖关系。
提高内聚,减少对外交互。
5. 迪米特法则
如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个类的某一个方法,可以通过第三者转发这个调用。
迪米特法则根本思想是强调了类之间的松耦合。
6. 开放-封闭原则
软件实体(类、模块、函数等)应该可以扩展,但是不可以修改。
特性:一是对扩展开放的;二是对修改封闭的。
相关文章推荐
- Itext+POI将Excel转换为PDF
- Hadoop中的FileSystem学习
- [share]How to Become a Lazy but Productive Android Developer
- iOS经典开源库
- Bash函数使用
- Java基础--集合框架Conllection(LinkedList、ArrayList)
- Leetcode: Bulls and Cows
- 用BCP命令将TSV,CSV等包含日期数据的字段导入SqlServer数据库
- 设计模式之外观模式
- HttpURLConnection用法
- 解决标题偏右的问题(一)
- 解决使用驱动器中的光盘之前需要将其格式化
- 性能测试新手误区(三):用户数与压力
- Solr5.3.1 SolrJ查询索引结果
- lastIndexOf 方法 (Array) (JavaScript)
- C语言运算符的优先级和结合性
- Traceoute
- apache httpd-2.4.18 安装教程
- Volley的网络请求有内存溢出现象学到的一点知识
- LinuxWindowSDK开发日记