设计模式六大原则

来源:互联网 发布:jquery easing.js下载 编辑:程序博客网 时间:2024/06/05 17:50

1.单一职责 

   定义:不要存在多于一个导致类变更的原因。通俗的说,即一个类只负责一项职责。 这个设计原则是很简单的 一般是不会有人会去故意违背但是

因为有职责扩散存在。因为某种原因,需求改变或者程序员理解更透彻,职责P被分化为粒度更细的职责P1和P2。 你必须要做出选择 是耗费时间精力重构, 亦或者是违背单一职责.

除非逻辑足够简单 否则尽量不要违背单一职责原则.

2.里氏替换

定义1:如果对每一个类型为 T1的对象 o1,都有类型为 T2 的对象o2,使得以 T1定义的所有程序 P 在所有的对象 o1 都代换成 o2 时,程序 P 的行为没有发生变化,那么类型 T2 是类型 T1 的子类型。

定义2:所有引用基类的地方必须能透明地使用其子类的对象。

里氏替换的要求其实很简单, 子类在继承父类时不要重写或者重载父类的非抽象方法,只添加新功能.当子类重载父类的方法时,方法的前置条件(即方法的形参)要比父类方法的输入参数更宽松.当子类实现父类的抽象方法时,方法的后置条件(即方法的返回值)要比父类更严格。

3.依赖倒置

  定义:高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。

低层模块尽量都要有抽象类或接口,或者两者都有。高层变量的声明类型尽量是抽象类或接口。使用继承时遵循里氏替换原则。

4.接口隔离

  定义:客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。 

  接口尽量小,但是要有限度。对接口进行细化可以提高程序设计灵活性是不挣的事实,但是如果过小,则会造成接口数量过多,使设计复杂化。所以一定要适度。为依赖接口的类定制服务,只暴露给调用的类它需要的方法,它不需要的方法则隐藏起来。只有专注地为一个模块提供定制服务,才能建立最小的依赖关系。提高内聚,减少对外交互。使接口用最少的方法去完成最多的事情

5.迪米特法则

  定义:一个对象应该对其他对象保持最少的了解。只与直接的朋友通信.

 每个对象都会与其他对象有耦合关系,只要两个对象之间有耦合关系,我们就说这两个对象之间是朋友关系。耦合的方式很多,依赖、关联、组合、聚合等。其中,我们称出现成员变量、方法参数、方法返回值中的类为直接的朋友,而出现在局部变量中的类则不是直接的朋友。也就是说,陌生的类最好不要作为局部变量的形式出现在类的内部。

6.开闭原则

定义:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。

  用抽象构建框架,用实现扩展细节。因为抽象灵活性好,适应性广,只要抽象的合理,可以基本保持软件架构的稳定。而软件中易变的细节,我们用从抽象派生的实现类来进行扩展,当软件需要发生变化时,我们只需要根据需求重新派生一个实现类来扩展就可以了。

0 0