面向对象编程----6大设计原则

一、单一职责原则(SRP)

  一个类,只有一个引起它变化的原因。SRP中,把职责定义为“变化的原因”。多个职责耦合在一起,会影响复用性。

  接口一定要做到单一职责,类的设计要尽量做到只有一个原因引起变化。

二、里氏替换原则(LSP)

  所有引用父类的地方必须能透明地使用其子类对象。

  只要父类能出现的地方,子类就可以出现,而且替换为子类也不会产生任何错误或异常,使用者可能根本就不需要知道是父类还是子类。但是反过来就不行了,有子类出现的地方,父类未必就能适应。

三、依赖倒置原则(DIP)

  依赖倒置原则的本质就是通过抽象(接口或抽象类)使各个类或模块的实现彼此的独立,不互相影响,实现模块间的松耦合。

  高层模块不应该是依赖低层模块,两者都应该依赖其抽象。抽象不应该依赖细节。细节应该依赖抽象。

  对象依赖关系有三种方式传递:

  (1)构造函数传递依赖对象。  (2)Setter方法传递依赖对象。  (3)接口声明依赖对象。

四、接口隔离原则(ISP)

  使用多个专门的接口比使用单一的总接口要好。在不违反单一原则的前提下,尽量使用多个专门的接口代替单一的接口。

  一个类对另外一个类的依赖性应当是建立在最小的接口上的。

  但另一方面,接口越多系统将会越复杂,在实际的开发中这并不是一件好事。所以需要点经验把握住这个“度”。

五、迪米特法则(LOD)

  又叫最少知识原则(LKP),就是说一个对象应该对其它对象尽可能少的了解。也即是平常所说的“不要和陌生说说话”。

  其中门面模式和调停者模式实际上就是迪米特法则的应用(有空再去详细了解下)。

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

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

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

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

  (3)谨慎使用Serializable。

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

六、开闭原则(OCP)

  软件实体应当对扩展开放,对修改关闭。软件系统中包含的各种组件(模块、类、方法)应该在不修改现有代码的基本上引入新的功能。

  开闭原则包括两方法意思:

  "开" : 对于组件功能的扩展是开放的,是允许对其进行功能扩展的。

  "闭" : 对于原有代码的修改是封闭的,即不应该修改原有的代码。

  实现开闭原则的关键就在于“抽象”。作为一个系统的抽象层,要预见所有可能的扩展,从而使增加任何扩展时,系统抽象底层不需要修改。

posted @ 2012-07-09 21:30  zhangchaozheng  阅读(222)  评论(0编辑  收藏  举报