论软件设计模式的应用

时间:2022-10-14 04:26:29

论软件设计模式的应用

摘要:设计模式是当今计算机科学中十分热门的话题之一,设计模式的重要性早已被越来越多的开发人员认识并应用到。到底什么是软件的设计模式,它又是如何衍生而来的,种类又该如何区分,本文将展开介绍。

关键词:设计模式

中图分类号:TP311 文献标识码:A文章编号:1007-9599 (2011) 13-0000-01

The Application of Software Patterns Design

Li Zhenguo

(Shandong Rural Credit Cooperatives,Qingdao266520,China)

Abstract:A design pattern is very popular in today's computer science topics,one of the importance of design patterns has long been recognized more and more developers and applied to.In the end what is software design patterns,it is how derived,how should distinguish between types,this will start a description.

Keywords:Design patterns

软件设计模式的思想从建筑领域(Christopher Alexander)进化而来。Kent Beck和Ward Cunningham将Christopher Alexander的思想应用到软件领域,他们记下了最初的一些模式(UI方面的);第一个发表的关于在开发中使用模式的著述是Erich Gamma于1991年发表的一篇论文;而最著名的则是GOF的设计模式(1995)了。

一、设计模式的定义

什么是“设计模式”呢?设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。

地上本没有路,走得人多了也就成了路。设计模式如同此理,它是经验的传承,并非体系;是被前人发现,经过总结形成了一套某一类问题的一般性解决方案,而不是被设计出来的定性规则;它不像算法那样可以照搬照用。

二、设计模式的种类

设计模式常常划分成不同的种类,常见的种类有:

(一)创建型设计模式

如工厂方法(Factory Method)模式、原型(Prototype)模式、建造(Builder)模式、抽象工厂(Abstract Factory)模式、单例(Singleton)模式等。

创建型模式,就是用来创建对象的模式,抽象了实例化的过程,它帮助一个系统独立于如何创建、组合和表示它的那些对象。所有的创建型模式都有两个永恒的主旋律:第一,它们都将系统使用的那些具体类的信息封装起来;第二,它们隐藏了这些类的实例是如何被创建和组织的。外界对于这些对象只知道它们共同的接口,而不清楚其具体的实现细节。正因如此,创建型模式在创建什么(what),由谁(who)来创建,以及何时(when)创建这些方面,都为软件设计者提供了尽可能大的灵活性。

单例模式解决的是实体对象的个数问题。在工厂方法中,工厂类成为了抽象类,其实际的创建工作将由其具体子类来完成。工厂方法模式的用意是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中去,强调的是“单个对象”的变化。抽象工厂模式是所有工厂模式中最为抽象和最具有一般性的一种形态。抽象工厂模式可以向客户提供一个接口,使得客户可以在不必指定产品的具体类型的情况下,创建多个产品族中的产品对象,强调的是“系列对象”的变化。建造模式把构造对象实例的逻辑移到了类的外部,在这个类的外部定义了这个类的构造逻辑,他把一个复杂对象的构造过程从对象的表示中分离出来,其直接效果是将一个复杂的对象简化为一个比较简单的目标对象,强调的是产品的构造过程。原型模式(Prototype Pattern)和工厂模式一样,同样对客户隐藏了对象创建工作,但是,与通过对一个类进行实例化来构造新对象不同的是,原型模式是通过拷贝一个现有对象生成新对象的。

(二)结构型设计模式

如合成(Composite)模式、装饰(Decorator)模式、(Proxy)模式、享元(Flyweight)模式、门面(Facade)模式、桥梁(Bridge)模式等。

结构型模式,顾名思义是类和对象的结构,它采用继承机制来组合接口或实现(类结构型模式),或者通过组合一些对象,从而实现新的功能(对象结构型模式)。这些结构型模式,它们在某些方面具有很大的相似性,仔细推敲,侧重点却各有不同。

Bridge模式通过将抽象和实现相分离,让它们可以分别独立的变化,它强调的是系统沿着多个方向的变化;Decorator模式采用对象组合而非继承的手法,实现了在运行时动态的扩展对象功能的能力,它强调的是扩展接口;Composite模式模糊了简单元素和复杂元素的概念,它强调的是一种类层次式的结构;Facade模式将复杂系统的内部子系统与客户程序之间的依赖解耦,它侧重于简化接口,更多的是一种架构模式;Flyweight模式解决的是由于大量的细粒度对象所造成的内存开销的问题,它与Façade模式恰好相反,关注的重点是细小的对象;Proxy模式为其他对象提供一种以控制对这个对象的访问,它注重于增加间接层来简化复杂的问题。

(三)行为型模式

如模版方法(Template Method)模式、观察者(Observer)模式、迭代子(Iterator)模式、责任链(Chain of Responsibility)模式、备忘录(Memento)模式、命令(Command)模式、状态(State)模式、访问者(Visitor)模式等等。

李建忠老师说过一句话,如果你只想掌握一种设计模式的话,那这个模式一定是模版方法(Template Method)模式。对于这个问题,我想可能是仁者见仁,智者见智,但是有一点不能否认的Template Method模式是非常简单而且几乎是无处不用,很少有人没有用过它。

以上是三种经典类型,实际上还有很多其他的类型,比如Fundamental型、Partition型,Relation型等等。

构建一个优秀的系统最困难之处不在于编码,而是在早期做出的设计上的决定。设计是软件开发生命周期中的关键阶段,好的设计能产生好的产品,而不当的设计则会影响最终产品的质量。设计的重要性已经深入人心,这从人们热烈讨论和研究设计模式就能看出来。设计模式是拥有多年开发设计经验的人给我们的经验传承,它是作为专家的建议而引入的,它背后的真正威力是其对真实世界的抽象。如果我们没有足够的经验,我们很难做出好的设计,但是富有经验的开发者和设计者以设计模式的形式将他们的经验传授给我们,拥有了这些经验之后,我们也能做出好的设计来了。

上一篇:水表管理模式的改变 下一篇:PKI在电子信息安全中的应用