设计原则(学习笔记)

来源:互联网 发布:js post async 编辑:程序博客网 时间:2024/06/07 18:12

设计原则

迪米特法则:

将类和成员的可访问性降到最小化,每一个软件单位对其他的单位都只有最少的知识,而且 局限与那些与本单位密切相关的软件单位,迪米特法则也称最少知道原则。

这个思想的意图就是要降低类之间的耦合度,大家都知道,耦合性越低,我们修改起来就越容易。

合成复用原则:

         优先使用对象的组合,而非类的继承。

         什么是组合?

         说白了就是把某个对象做为成员变量,有些事情,委托给这个对象来做。显然,这个对象可以动态改变,所以要比继承灵活。

里氏代换原则:

         子类必须能够完全替换父类使用,而不会发生任何异常。就是说,你写的子类,在运行时必须完全替代父类,否则,就不要继承!因为我们在设计的时候,为了降低耦合度,往往是只与父类“相识”,而不认识具体子类,就是把子类当做父类来用,甚至是只有运行时才根据需要创建相应的子类,如果你写的子类不满足这个条件,运行时就会出问题。

Coad法则:

       这个讲的也是对继承使用的约束条件,但是,比上一个严厉得多。如下:

1.子类是父类的一个特殊种类,而不是由父类扮演的一个角色。还有另外一种说法:只有“Is-A”关系才符合继承关系,“Has-A”关系应当用聚合来描述。 

2.子类的一个实例永远不需要转化为其他类的一个对象。

3.子类是对其超类的责任进行扩展,而非重载或废除。

4.子类不对仅作为工具类的功能进行扩展。

有一个很经典的例子,也是我们学习面向对象的时候经常举到的:

我总感觉吧,这个类图是满足is-a的关系的,但是,不是is-a-special,由于人即可以是老师,同时也可以做学生,那么显然,这是人扮演的两个角色,这句不满足第一个条件。推荐使用组合:

依赖倒转原则:

定义A:高层模块不应该依赖于低层模块。两个都应该依赖抽象

定义B:抽象不应该依赖于细节。细节应该依赖抽象

         这个目的也是降低耦合度,都不依赖于具体类,而依赖于接口或者抽象类,比较明显的例子就是工厂模式。

         开放封闭原则:

         定义很简单:对拓展开放,对修改封闭。

         举一个违反这个原则的例子:使用if-else语句的简单工厂模式。

单一职责原则:

定义:就一个类而言,应该只有一个引起它变化的原因

如果一个类承担的职责过多,就等于吧这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当变化发生时,设计会遭到意想不到的破坏。

这可以作为类划分的依据。

 

原创粉丝点击