申明:本文是自己看了<java与模式>一书后,对设计模式的原则的理解,并不代表正确性.
     相信,在学习过程中,我会不断的更新本文,并最终达到理解透彻.

前段时间,看<java与模式>,因为没太在意设计原则,只能做到知其然而不知其所以然.以至在和别人讨论的时候,也不太明白模式的好处或者能够很好的讲清一个模式,因此,有必要,在此记录自己的心得体会和理解.

首先,需要理解面向对象的三大原则(封装,继承,多态).

设计模式前提原则:
(1)针对接口编程,而不是针对实现编程
(2)优先使用对象组合,而少用继承
(3)封装变化点

具体原则的实现:

开--闭原则:

设计模式的核心原则是 "开--闭原则",,都是围绕这个原则来展开的.
该原则讲的是:对修改关闭,对扩展开放.
意思就是说,一个好的系统,是应该在不修改原有代码的基础上,扩展新的功能.
而要做到这样,一个关键,就是高度的抽象化,及,在设计系统的时候,需要考虑到一些以后可变的因素,把这些可变的部分,抽象出来.
也就是说,不应该修改抽象的类或者接口,允许扩展的是具体的实现的类.
例子参照:
工厂方法
工厂方法,是很满足"开--闭原则"的

里氏代换原则:

该原则讲的是:任何父类可以出现的地方,那其子类也可以出现.
<java与模式>一书上讲的是:若对于每一个类型P的对象p1,都存在一个类型C的对象c1,使得在所有针对p编写的程序A中,用c1替换p1后,程序A的行为功能不变,则C是P的子类型(个人感觉这样解释太长了)
个人理解,这个就是 is-a的关系.
但是,该模式,反过来讲,就不一定对了.及在子类可以出现的地方,不一定父类就可以出现.
举个例子:
Code

上面的列子,没经过测试,但是,应该是这样的.
及Test(A a)满足该原则,Test2(B b)则是反列.

依赖倒转原则:
该原则讲的是:
要依赖抽象,而不要依赖具体的实现
如果说"开--闭原则"是设计的目标的话,那么依赖倒转原则就是实现这个目标的手段.
作用到代码上,及如上面的代码,Test(A a),该函数,参数,应该用抽象或者接口,而不是用具体的实现类B.

合成/聚合原则:
该原则讲的是:
要尽量的用到合成或者聚合,而不是用继承;
及做到 has-a 的关系,也就是说,尽量的在一个新对象中使用原有的一个对象,使这个对象是新对象的一部分.新的对象,通过这个原有的对象的一些委派,来做到复用原有对象功能的目的.
例子参考:
适配器模式的对象的适配

迪米特法则:
该原则讲的是:
类与类之间,尽量的减少相互作用,减少藕合度.
<java与模式>书上讲的:只与你最直接的朋友通信
列子参考:
门面模式

接口隔离原则:
该原则讲的是:
接口要尽可能的小,减小接口污染


网上其他的文章连接:

设计模式原则详解
浅谈设计的原则(整理)
对面向对象设计的基石--开闭原则
posted on 2008-01-05 15:50  颜昌钢  阅读(338)  评论(2编辑  收藏  举报