您的位置:首页 > 其它

设计模式原则(自己理解的)

2008-01-05 15:50 357 查看
申明:本文是自己看了<java与模式>一书后,对设计模式的原则的理解,并不代表正确性.

相信,在学习过程中,我会不断的更新本文,并最终达到理解透彻.

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

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

设计模式前提原则:

(1)针对接口编程,而不是针对实现编程

(2)优先使用对象组合,而少用继承

(3)封装变化点

具体原则的实现:

开--闭原则:



设计模式的核心原则是 "开--闭原则",,都是围绕这个原则来展开的.

该原则讲的是:对修改关闭,对扩展开放.

意思就是说,一个好的系统,是应该在不修改原有代码的基础上,扩展新的功能.

而要做到这样,一个关键,就是高度的抽象化,及,在设计系统的时候,需要考虑到一些以后可变的因素,把这些可变的部分,抽象出来.

也就是说,不应该修改抽象的类或者接口,允许扩展的是具体的实现的类.

例子参照:

工厂方法

工厂方法,是很满足"开--闭原则"的

里氏代换原则:

该原则讲的是:任何父类可以出现的地方,那其子类也可以出现.

<java与模式>一书上讲的是:若对于每一个类型P的对象p1,都存在一个类型C的对象c1,使得在所有针对p编写的程序A中,用c1替换p1后,程序A的行为功能不变,则C是P的子类型(个人感觉这样解释太长了)

个人理解,这个就是 is-a的关系.

但是,该模式,反过来讲,就不一定对了.及在子类可以出现的地方,不一定父类就可以出现.

举个例子:

public abstract class A

public class B:A

void Test(A a)

void Test2(B b)

void main()

{

A a= new B();

Test(a);

B b= new B();

Test(b);

Test2(b);

Test2(a);

}

上面的列子,没经过测试,但是,应该是这样的.

及Test(A a)满足该原则,Test2(B b)则是反列.

[b]依赖倒转原则:

该原则讲的是:[/b]要依赖抽象,而不要依赖具体的实现

如果说"开--闭原则"是设计的目标的话,那么依赖倒转原则就是实现这个目标的手段.

作用到代码上,及如上面的代码,Test(A a),该函数,参数,应该用抽象或者接口,而不是用具体的实现类B.

合成/聚合原则:

该原则讲的是:
要尽量的用到合成或者聚合,而不是用继承;

及做到 has-a 的关系,也就是说,尽量的在一个新对象中使用原有的一个对象,使这个对象是新对象的一部分.新的对象,通过这个原有的对象的一些委派,来做到复用原有对象功能的目的.

例子参考:

适配器模式的对象的适配

迪米特法则:

该原则讲的是:
类与类之间,尽量的减少相互作用,减少藕合度.

<java与模式>书上讲的:只与你最直接的朋友通信

列子参考:

门面模式



接口隔离原则:

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

网上其他的文章连接:

设计模式原则详解

浅谈设计的原则(整理)

对面向对象设计的基石--开闭原则
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: