您的位置:首页 > 其它

浅谈设计模式

2012-12-22 13:38 253 查看
大家好,在这个版块儿,主要讨论一下设计模式(Design Pattern),上学期学了设计模式这门课,针对其中三个模式做了presentation。在学习过程中,深深感觉到了设计模式对于software developer的重要性,在此,将讨论23种不同的设计模式,1,为了方便自己复习,更熟练的掌握这些知识。2,为了和大家交流经验,共同提高。在此,先对设计模式做个简单的介绍。

什么是设计模式?设计模式(Design Pattern)是一套被反复使用,多数人知道的,经过分类编目,代码设计的总结。在程序中使用设计模式,是为了重用代码,从而达到节省时间与空间利用率;更使代码易被人理解,保证代码的可靠性。设计模式是软件工程的基石,对于软件工程师是非常必要掌握的知识。

接下来,我们讨论一下为什么我们要学习设计模式,也就是学习设计模式motivation。设计模式最根本的宗旨是为了代码复用,增加可维护性。在面向对象程序设计(Object Oriented Programming)中,有几个原则:开闭原则(Open Closed Principal,OCP),里氏代换原则(Liskov Substitution Principal, LSP),依赖倒转原则(Dependency Inversion Principal,DIP),接口隔离原则(Interface
Segregation Principal,ISP),聚合复用原则(Composite Reuse Principal,CRP),最小知识原则(Principal of Least Knowledge,PLK)。设计模式其实就是实现了这些原则,从而达到了增加代码复用,达到了可维护的作用。接下来详细介绍这几种原则。

开闭原则(Open Closed Principal):开闭原则的核心就是对于系统,对其功能的扩展是开放的,允许软件工程师对其功能进行扩展。但是对于原有代码的修改,是封闭的,是不允许的。正如Bertrand Meyer 1988年所说的:“Software entities should be open for extension, but closed for motivation.” 如何实现开闭原则呢?实现开闭原则的关键就是抽象类,即为把系统所有可能的行为抽象为一个抽象底层,这个底层要预见所有扩展的可能,即在所有情况下,系统的抽象底层不需要修改。我们可以通过继承,重载,委托的手段实现功能扩展。

里氏代换原则(Liskov Substitution Principal):里氏代换原则定义,任何基类可以出现的地方,子类一定也可以出现,LSP是继承复用的基石,当子类替换基类时,系统功能不会受到影响,基类才可以被真正的复用。从而也可以在子类中相对的增加新功能。因此LSP是对于OCP的补充。通过上一段落,我们知道,实现OCP的核心技术就是实现抽象类,然而基类与子类的继承关系就是抽象化的具体实现。例如我们有两个类A与B,类B继承类A,在一些情况,类B没法完全取代类A,在这时候,LSP原则就会被违反,因此我们在这时候的解决方案就是创建一个新的抽象类C,将A与B的共同行为移到C中来解决问题。并且将B与A之间的关系更改为委派关系。

依赖倒转原则(Dependency Inversion Principal,DIP):依赖倒转原则有两个关键的宗旨:1,抽象不应该依赖于细节,细节应当依赖于抽象;2,要针对接口编程,而不是针对实现编程。传递参数,或者在组合聚合关系中,尽量引用层次高的类。

接口隔离原则(Interface Segregation Principal,ISP):ISP的核心原则为:使用多个专门的接口要比使用一个总的接口要好很多,一个类对另外一个类的依赖性应当是建立在最小的接口上的。一个接口代表一个角色,不应该把不同的角色交给一个大的接口,没有关系的接口合并在一起,形成了一个大的接口,是对接口与角色的污染!

合成/聚合复用原则(Composite/Aggregate Reuse Principal,CARP):合成复用原则的核心就是在一个新的对象里使用一些已有的对象,使之成为新对象的一部分,新对象对这些已有对象的委派达到复用已有功能的目的。从而继承关系就少了很多。

上面介绍了OOD的几种核心原则。这些原则都是实现设计模式的核心思想。下面我们来讨论一下设计模式的四个基本要素。

1,模式名称:用几个英文单词来形象的表述这个模式。给学习者和使用者直观的印象。

2,问题:描述了何时使用这个模式,来解决什么样的问题。

3,解决方案:描述了设计的组成成分,他们之间的相互关系以及各自的职责和协作方式。

4,效果:描述了这个模式所应用后得到的效果。从程序的时间和空间复杂度去考虑。

下面我们来介绍一下一些基本的设计模式,将在后续文章中用C#和C++语言对每个模式给出范例。设计模式大体上分为三种类型,一共23个设计模式。

1,创建型模式:单件模式,抽象工厂模式,建造者模式,工厂模式,原型模式。

2,结构型模式:适配器模式,桥接模式,装饰模式,组合模式,外观模式,享元模式,代理模式。

3,行为型模式:模板方法模式,命令模式,迭代器模式,观察者模式,中介者模式,备忘录模式,解释器模式,状态模式,策略模式,职责链模式,访问者模式
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: