设计模式:六大原则

来源:互联网 发布:世界史书推荐知乎 编辑:程序博客网 时间:2024/03/29 00:46

想了解一些设计模式的相关知识,看了Java与模式的书,在这里进行整理。首先是设计模式的六大原则。

1 开闭原则

定义:

开闭原则是讲:一个软件实体应当对扩展开放,对修改关闭。在设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展。应当可以在不修改源代码的情况下改变这个模块的行为。

满足开闭原则的软件系统的有点:

通过扩展已有的软件系统,可以提供新的行为,以满足新的需求,使变化中的软件系统有一定的适应性和灵活性。已有的软件模块,重要的抽象层模块不能修改,这就使变化中的软件系统有一定的稳定性和延续性。

如何做到:

抽象化是关键。可以给出一个或多个抽象Java类或Java接口,规定所有的具体类必须提供的方法的特征。这个抽象层预见了可能的扩展。在扩展的情况下都不会改变,这就使得系统的抽象层不需修改,从而满足开闭原则的第二条:对修改关闭。同时,从抽象层导出一个或多个新的具体类改变系统的行为,因此满足开闭原则的第一条:对扩展开放。

2 里氏替换原则

定义:

一个软件实体如果使用的是一个超类的话,那么一定适用于其子类,而且它根本不能察觉出超类和子类对象的区别。反过来代换则不成立,即如果一个实体使用的是一个子类的话,那么它不一定适用于基类。

Java语言对里氏替换的支持:

子类必须具备超类的全部接口,如果Java程序破坏这一条件,Java编译器给出错误。如:超类Base声明了一个public的方法,那么子类可否将方法的权限改为private的低访问权限的方法?不可以。

3 依赖倒转原则

定义:

要依赖于抽象,不要依赖于具体实现。

why:

传统的过程的设计方法倾向于使高层次的模块依赖于低层次的模块;抽象层依赖于具体层次。倒转原则要把这个错误的依赖关系倒转过来。

怎么做:

针对接口编程,应当使用Java接口和抽象类进行变量的类型声明、参数声明、方法返回类型声明等。变量被声明的类型叫变量类型,变量所引用的对象的真实类型叫实际类型。

4 接口隔离原则

定义:

使用多个专门的接口比使用单一的总接口要好。一个类对另一个类的依赖性应当是建立在最小的接口上的。

接口污染:

过于臃肿的接口是对接口的污染。每一个接口都代表一个角色,因此将角色区分清楚是系统设计的一个重要工作。不应当将几个不同的角色都交给同一个接口,而应当交给不同的接口。

5 迪米特法则

定义:

又叫做最少知识原则,一个对象应当对其他对象有尽可能少的了解,只与直接的朋友通信。首先来解释一下什么是直接的朋友:每个对象都会与其他对象有耦合关系,只要两个对象之间有耦合关系,我们就说这两个对象之间是朋友关系。耦合的方式很多,依赖、关联、组合、聚合等。其中,我们称出现成员变量、方法参数、方法返回值中的类为直接的朋友,而出现在局部变量中的类则不是直接的朋友。也就是说,陌生的类最好不要作为局部变量的形式出现在类的内部。

why:

降低类之间的耦合,由于每个类都减少了不必要的依赖,因此的确可以降低耦合关系。但是凡事都有度,虽然可以避免与非直接的类通信,但是要通信,必然会通过一个"中介"来发生联系。过分的使用迪米特原则,会产生大量这样的中介和传递类,导致系统复杂度变大。所以在采用迪米特法则时要反复权衡,既做到结构清晰,又要高内聚低耦合。
0 0
原创粉丝点击