诺亚孤舟

导航

设计模式六大设计原则

一)单一职责原则【Single Responsibility Principle

       单一职责原则:应该有且仅有一个原因引起类的变更。

 

(二)里氏替换原则【Liskov Substitution Principle

里氏替换法则有两种定义:

 

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

 

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

 

我们在类中调用其他类是务必要使用父类或接口,如果不能使用父类或接口,则说明类的设计已经违背了 LSP 原则。

 

(三)依赖倒置原则【Dependence Inversion Principle

依赖倒置原则包含三层含义:

(1)       高层模块不应该依赖低层模块,两者都应该依赖其抽象。

(2)       抽象不应该依赖细节。

(3)       细节应该依赖抽象。

 

(四)接口隔离原则【Interf ace Segregation Principle

       接口尽量要小。这是接口隔离原则的核心定义,不出现臃肿的接口(Fat Interface),但是“小”是有限度的,首先就是不能违反单一职责原则。根据接口隔离原则拆分接口时,必须首先满足单一职责原则。

 

       接口要高内聚。什么是高内聚?高内聚就是提高接口、类、模块的处理能力,减少对外的交互。

 

       定制服务。一个系统或系统内的模块之间必然会有耦合,有耦合就要相互访问的接口,我们设计时就需要给各个访问者(也就客户端)定制服务。

 

       接口设计是有限度的。接口的设计粒度是越小系统越灵活,这是不争的事实,但是这就带来的结构的复杂化,开发难度增加,维护性降低,这不是一个项目或产品所期望看到的,所有接口设计一定要注意适度。

 

(五)迪米特法则【Low Of Demeter

       迪米特法则(Law of Demeter)又叫作最少知道原则(Least Knowledge Principle 简写LKP),就是说一个对象应当对其他对象有尽可能少的了解,不和陌生人说话。英文简写为: LoD.。

 

狭义的迪米特法则的缺点:

在系统里造出大量的小方法,这些方法仅仅是传递间接的调用,与系统的商务逻辑无关。

遵循类之间的迪米特法则会是一个系统的局部设计简化,因为每一个局部都不会和远距离的对象有直接的关联。但是,这也会造成系统的不同模块之间的通信效率降低,也会使系统的不同模块之间不容易协调。

门面模式和调停者模式实际上就是迪米特法则的应用。

广义的迪米特法则在类的设计上的体现:

优先考虑将一个类设置成不变类。

尽量降低一个类的访问权限。

谨慎使用Serializable。

尽量降低成员的访问权限。

 

(六)开闭原则【Open Close Principle

关于开放封闭原则,其核心的思想是:

软件实体应该是可扩展,而不可修改的。也就是说,对扩展是开放的,而对修改是封闭的。

因此,开放封闭原则主要体现在两个方面:

对扩展开放,意味着有新的需求或变化时,可以对现有代码进行扩展,以适应新的情况。

对修改封闭,意味着类一旦设计完成,就可以独立完成其工作,而不要对类进行任何修改。

 

 

规则建议:

开放封闭原则,是最为重要的设计原则,Liskov替换原则和合成/聚合复用原则为开放封闭原则的实现提供保证。

可以通过Template Method模式和Strategy模式进行重构,实现对修改封闭、对扩展开放的设计思路。

封装变化,是实现开放封闭原则的重要手段,对于经常发生变化的状态一般将其封装为一个抽象,例如银行业务中的IBankProcess接口。

拒绝滥用抽象,只将经常变化的部分进行抽象,这种经验可以从设计模式的学习与应用中获得。

 

 

posted on 2014-01-09 13:36  诺亚孤舟  阅读(242)  评论(0编辑  收藏  举报