设计模式:六大原则
来源:互联网 发布:世界史书推荐知乎 编辑:程序博客网 时间:2024/03/29 00:46
想了解一些设计模式的相关知识,看了Java与模式的书,在这里进行整理。首先是设计模式的六大原则。
1 开闭原则
定义:
开闭原则是讲:一个软件实体应当对扩展开放,对修改关闭。在设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展。应当可以在不修改源代码的情况下改变这个模块的行为。
满足开闭原则的软件系统的有点:
通过扩展已有的软件系统,可以提供新的行为,以满足新的需求,使变化中的软件系统有一定的适应性和灵活性。已有的软件模块,重要的抽象层模块不能修改,这就使变化中的软件系统有一定的稳定性和延续性。
如何做到:
抽象化是关键。可以给出一个或多个抽象Java类或Java接口,规定所有的具体类必须提供的方法的特征。这个抽象层预见了可能的扩展。在扩展的情况下都不会改变,这就使得系统的抽象层不需修改,从而满足开闭原则的第二条:对修改关闭。同时,从抽象层导出一个或多个新的具体类改变系统的行为,因此满足开闭原则的第一条:对扩展开放。
2 里氏替换原则
定义:
一个软件实体如果使用的是一个超类的话,那么一定适用于其子类,而且它根本不能察觉出超类和子类对象的区别。反过来代换则不成立,即如果一个实体使用的是一个子类的话,那么它不一定适用于基类。
Java语言对里氏替换的支持:
子类必须具备超类的全部接口,如果Java程序破坏这一条件,Java编译器给出错误。如:超类Base声明了一个public的方法,那么子类可否将方法的权限改为private的低访问权限的方法?不可以。
3 依赖倒转原则
定义:
要依赖于抽象,不要依赖于具体实现。
why:
传统的过程的设计方法倾向于使高层次的模块依赖于低层次的模块;抽象层依赖于具体层次。倒转原则要把这个错误的依赖关系倒转过来。
怎么做:
针对接口编程,应当使用Java接口和抽象类进行变量的类型声明、参数声明、方法返回类型声明等。变量被声明的类型叫变量类型,变量所引用的对象的真实类型叫实际类型。
4 接口隔离原则
定义:
使用多个专门的接口比使用单一的总接口要好。一个类对另一个类的依赖性应当是建立在最小的接口上的。
接口污染:
过于臃肿的接口是对接口的污染。每一个接口都代表一个角色,因此将角色区分清楚是系统设计的一个重要工作。不应当将几个不同的角色都交给同一个接口,而应当交给不同的接口。
5 迪米特法则
定义:
又叫做最少知识原则,一个对象应当对其他对象有尽可能少的了解,只与直接的朋友通信。首先来解释一下什么是直接的朋友:每个对象都会与其他对象有耦合关系,只要两个对象之间有耦合关系,我们就说这两个对象之间是朋友关系。耦合的方式很多,依赖、关联、组合、聚合等。其中,我们称出现成员变量、方法参数、方法返回值中的类为直接的朋友,而出现在局部变量中的类则不是直接的朋友。也就是说,陌生的类最好不要作为局部变量的形式出现在类的内部。
why:
降低类之间的耦合,由于每个类都减少了不必要的依赖,因此的确可以降低耦合关系。但是凡事都有度,虽然可以避免与非直接的类通信,但是要通信,必然会通过一个"中介"来发生联系。过分的使用迪米特原则,会产生大量这样的中介和传递类,导致系统复杂度变大。所以在采用迪米特法则时要反复权衡,既做到结构清晰,又要高内聚低耦合。
0 0
- 设计模式六大原则
- 设计模式六大原则
- 设计模式六大原则
- 设计模式六大原则
- 设计模式六大原则
- 设计模式六大原则
- 设计模式六大原则
- 设计模式六大原则
- 设计模式六大原则
- 设计模式六大原则
- 设计模式六大原则
- 设计模式六大原则
- 设计模式六大原则
- 设计模式六大原则
- 设计模式六大原则
- 设计模式六大原则
- 【设计模式】六大原则
- 设计模式六大原则
- c++第二次试验-通过计算说明,这个换钱计划对百万富翁是否是个划算的交易(作业)
- image-style-transfor项目在win10上采用gpu运行的部署
- C++ Primer_4th学习笔记(8)- 数组和指针
- < Unable to ping server at localhost:1099>问题解决---小记
- 实现Runnable接口适合资源的共享
- 设计模式:六大原则
- 求π的近似值
- ZigBee_端点管理_描述符
- 剑指offer 数值的整数次幂,求base的exponent次方,不能使用库函数,同时不需要考虑大数问题
- [笔记]算法复习笔记---栈、队列、链表(下)
- POJ 3009 Curling 2.0
- 15分钟学会使用Git和远程代码库
- 201312 CCF 第二题 ISBN号码
- 为什么mysql要做主从复制?