现在的位置: 首页 > 综合 > 正文

设计模式的原则

2014年01月07日 ⁄ 综合 ⁄ 共 1421字 ⁄ 字号 评论关闭

 

有人说设计模式就是对设计原则的具体实现,将设计原则掌握好,了解透,对设计模式的理解与应用自然就会清晰了。不过想真的将这些原则了解的很透彻真的很难,在此先做下小小的整理与解析。渴望深层理解!

一、设计原则的含义:

1、单一职责原则:就一个类而言,应该仅有一个引起它变换的原因。

2、开放封闭原则:软件实体(类,模块,方法等)可以扩展,但不应该修改。()

3、里氏代换原则:子类型必须能够替换掉它的父类型。

4、迪米特法则:如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另外一个类的某一个方法的话,可以通过第三者转发这个调用。

5、依赖倒转原则:A.高层模块不应该依赖低层模块。两个都应该依赖抽象。B.抽象不应该依赖细节。细节应该依赖抽象。

二、每个原则的必要性:

1、如果将一个类赋予多个功能,那么这个类在维护阶段被修改的可行性就会非常大,因为任何需求的变化,都牵涉到这个类。这是我们所不希望的。

2、开放封闭原则:软件设计追求的目标是封装变化、降低耦合。而开放封闭原则正是对这一目标的直接体现。我要问自己一下为什么要封装变化,降低耦合?我希望我设计的软件结构稳定、易维护(软件为什么要维护,这是因为计算机程序总是在变化:故障要排除,改进的要加进去,而且优化工作也要做。)、易复用。解决易维护性和易复用性的做法就是封装变化,降低耦合。

3、里氏代换原则的必要性:如果子类不能够替换父类,那么我们是无法只用继承就能够完成对父类的功能扩展。

4、迪米特法则的根本思想是强调了类之间的松耦合。类之间的耦合越弱,越有利于复用。一个处在弱耦合的类被修改,不会对有关系的类造成波及。

5、依赖倒转原则的必要性:往昔我在编程时高层模块调用低层模块来完成一些任务,如果我们想复用我们的高层模块,这时就必定牵涉到低层模块,这时就很难谈得上对高层的服用了。

三、原则间的关系

可以说开放封闭原则是面向对象的核心原则。而其他一些原则则往往会为这一核心原则服务。

开放封闭原则的关键步骤就是发现变化点对变化点进行抽象。我们要将变化的共性找出来将其抽象为接口或抽象类等,比如计算器,我们有加、减、乘、除,客户端需要调用这些类,如果我们的需求要增加一个乘方类等我们就得改动客户端,这时我们要将这些都抽象为一个运算的接口,这样当需求变化时我们只需增加相应的具体运算类就可以了——对扩展开放,对修改关闭。而一旦有抽象就必定要有子类继承或实现它,那这种抽象应到什么地步呢,我想里氏代换原则就是对这一过程的具体规范约束,应该做到所有子类都能代替这个父类的程度。至于怎样才能做到软件实体的开放封闭呢,这就是依赖倒转原则在起作用了,它是开放封闭原则的实现方法。

我们要利用依赖倒转原则实现软件的开放封闭,而实现的关键步骤就是对变化点抽象,完美的达到抽象就需要使用里氏代换原则来约束。

四、一点补充

开放封闭原则是开放扩展关闭修改。其关键步骤就在发现变换点是对变化点进行抽象,使具体实现面向接口或抽象编程。但要想在设计之初就发现这些变化是非常困难的。不过我们应尽量在开发展开不久就发现变化点,否则当我们在很多地方都应用了这些变化点再想将他们抽象出来就不那么容易了。这一点在做收费系统时有所感触,如利用抽象工厂+反射来实现数据访问层,开始没有抽象接口,如果在业务逻辑层中的很多地方都是用了这些具体数据处理层的类,那要想在抽象,将业务逻辑中的使用改为使用抽象,那就是不是很容易了。

抱歉!评论已关闭.