其他设计原则

来源:互联网 发布:win8网络连接图标不见 编辑:程序博客网 时间:2024/05/30 04:16

OCP(Open - Colse Principle) 开放-封闭原则:

软件实体(类、模块、函数等等)应该是可以对模块进行快速扩展的,但是不可修改的。

遵循OCP原则的模块具有两个主要特征.他们是:

1. "对于扩展是开放的"(Open for extension)

   这意味着模块的行为是可以扩展的。当应用的需求改变是,我们可以扩展,使其具有满足哪些改变的新行为。换句话说,我们可以改变模块的功能。

2. "对于更改是封闭的"(Close for modification)"。

   对模块进行扩展时,不必改动模块的源代码或者二进制代码。模块的二进制代码可执行版本,无论时可连接的库、dll或者java的.jar文件都无需改动。

OCP背后的机制主要是抽象(abstraction)和多态(polymorphism)。

 

LSP(Liskov Substitution Principle) 里氏替换原则: 

子类型(subtype)必须能够替换掉他们的基类型(base type)。 若对每个类型S的对象O1,都存在一个类型T的对象O2,使得在所有针对T编写的程序P中,用O1替换O2后,程序P行为功能不变,则S是T的子类型。

 

DIP(Dependency-Inversion Principles) 依赖倒置原则: 

1.
高层模块不应该依赖于低层模块。二者都应该依赖于抽象。
2.抽象不应该依赖于细节, 细节应该依赖于抽象。

    由DIP可知:

          任何变量都不应该持有一个指向具体类的指针或者引用.

          任何类都不应该从具体类派生。

          任何方法都不应该复写它的基类中的已经实现的方法。

 

ISP (Interface Segregation Principles) 接口隔离原则: 

不要强迫客户依赖于它们不用的方法。接口属于客户,不属于它所在的类层次结构。

如果强迫客户程序依赖于那些它们不使用的方法,那么这些客户程序就面临着由于这些未使用方法的改变所带来的变更。这无意中导致了所有客户程序之间的耦合。换句话说,如果一个客户程序依赖于一个含有它不使用的方法的类,但是其他客户程序却要使用该方法,那么当其他客户要求这个类改变时,就会影响到这个客户程序。我们希望尽可能地避免这种耦合,因此我们希望分离接口。


原创粉丝点击