软件设计模式浅析论文_第1页
软件设计模式浅析论文_第2页
软件设计模式浅析论文_第3页
软件设计模式浅析论文_第4页
软件设计模式浅析论文_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

精选文档软件设计模式浅析陈亚东(中原工学院 软件学院,河南 郑州 450000) 摘要:什么是软件设计模式呢?其实广义的来讲,软件设计模式是可解决一类软件问题并且能反复使用的软件设计方案;狭义的来讲,软件设计模式是对被用来在特定场景下解决一般设计问题的类和相互通信的对象的描述。是在类和对象的层次描述的可反复使用的软件设计问题的解决方案。软件设计模式通常描述了一组相互紧密作用的类与对象。在课堂学到的软件设计模式,我学习的并不好,对各种模式的运用和实现,感觉简单,但是要做起来还是有些难度。本文简单讲述了以面向对象技术为基础的软件设计模式的分析。关键词:设计模式;设计方案;面向对象中国分类号:TP311.5 文献标志码:ASoftware design patterns is analysedChenyadong(Zhongyuan University of Technology Software college,henan zhengzhou 450000)Abstract: What is a software design pattern? Actually, broadly speaking, the software design pattern is a type of the software can solve the problem and the repeated use of the software design; Narrowly speaking, the software design pattern is to be used in specific scenarios and communicate with each other to solve the problem of general design of the description of the object. Is described in the level of the classes and objects can be repeated use of the software design of the solution of the problem. Software design patterns usually describes a set of mutually close function classes and objects.Learned in the class of software design pattern, Im not a very good learning, for the use of various patterns and implementation, feeling is simple, but want to do or some difficulty. This article simply describes the software design based on object-oriented technology pattern analysis.Key words: design patterns; Design scheme; object-oriented 对于软件设计模式,从上课到现在,我在头脑中还没有一个完整的概念,主要是因为我的基础比较差,凭自身能力还不能写出来一个项目。通过上网搜索,知道了什么是软件设计模式,它是一套被反复使用,多数人知晓的,经过分类编目的,代码设计经验的总结,使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性1。软件设计模式分为基础模式、委托模式、接口模式、代理模式、创建型模式、抽象工 厂模式、单例模式、生成器模式、工厂方法模式、原型模式、适配器模式等等。1、 设计模式模式是用来描述所交流的问题及解决方案的2,一个完整的设计模式主要由模式名称、问题、解决方案、效果四个基本要素组成2。设计模式体现的是程序整体的一种构思,所以有时候它也会出现在分析或者是概要设计阶段中,设计模式的核心思想是通过增加抽象层,把变化部分从那些不变的部分中分离出来。这就是我所了解的设计模式。设计模式有五种原则,“开-闭”原则(OCP)、单一职责原则(SRP)、里氏代换原则(LSP)、依赖倒置原则(DIP)和接口隔离原则(ISP)3,设计模式就是实现了上面所说的五种原则,从而达到了代码复用、增加可维护性的目的。在设计模式经典著作GOF95中,设计模式从应用的角度上被分为三个大的类型,分别是创建型模式、结构型模式和行为型模式。又根据模式的范围分,模式既用于类又用于对象,类模式是处理类和子类之间的关系,这些关系通过继承建立,是静态的,在编译时刻便确定下来了;对象模式是处理对象间的关系,这些关系在运行时刻是可以变化的,更具动态性。从某种意义上来说,几乎所有模式都使用继承机制,所以“类模式”只指那些集中于处理类间关系的模式,而大部分模式都属于对象模式的范畴。2、 设计模式的分类创建型设计模式是用来创建对象的模式,抽象了实例化过程,工厂模式、抽象工厂模式、单件模式、生成器模式、原型模式都属于创建型设计模式。简单来说一下创建型结构模式有哪几种模式吧,首先说一下工厂模式,工厂模式:客户类和工厂类分开,消费者任何时候需要某种产品,只需要向工厂请求即可,消费者无须修改就可以接纳新产品;缺点就是当产品修改时,工厂类也要做出相应的修改。比如:如何创建及如何向客户端提供。抽象工厂模式:为一个产品族提供统一的创建接口,当需要这个产品族的某一系列的时候,可以从抽象工厂中选出相应的系列创建一个具体的工厂类。单件模式:保证一个类有且仅有一个实例,提供一个全局访问点。生成器模式:将复杂对象创建与表示分离,同样的创建过程可创建不同的表示,允许用户通过指定复杂对象类型和内容来创建对象,用户不需要知道对象内部的具体构建细节。原型模式:通过“复制”一个已经存在的实例来返回新的实例(不新建实例)。被复制的实例就是“原型”,这个原型是可定制的。原型模式多用于创建复杂的或者耗时的实例,因为这种情况下,复制一个已经存在的实例使程序运行更高效;或者创建值相等,只是命名不一样的同类数据。这几种模式老师也让做过作业,做起来感觉也挺简单的。结构型模式讨论的是类和对象的结构,它采用继承机制来组合接口或实现(类结构型模式),或者通过组合一些对象来实现新的功能(对象结构型模式)。结构型模式有这几种模式,组合模式:定义一个接口,使之用于单一对象,也可以应用于多个单一对象组成的对象组。装饰模式:给对象动态添加额外的职责,就好像给一个物体加上装饰物,完善其功能。代理模式:在软件系统中,有些对象有时候由于跨越网络或者其他障碍,而不能够或者不想直接访问另一个对象,直接访问会给系统带来不必要的复杂性,这时候可以在客户程序和目标对象之间增加一层中间层,让代理对象来代替目标对象打点一切,这就是代理模式。享元模式:Flyweight是一个共享对象,它可以同时在不同上下文(Context)使用。外观模式:外观模式为子系统提供了一个更高层次、更简单的接口,从而降低了子系统的复杂度,使子系统更易于使用和管理。外观承担了子系统中类交互的责任。桥梁模式:桥梁模式的用意是将问题的抽象和实现分离开来实现,通过用聚合代替继承来解决子类爆炸性增长的问题。适配器模式:将一个类的接口适配成用户所期待的接口。一个适配器允许因为接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包装在一个已存在的类中。对于这几种模式,我理解的太笼统,也不太明白,只是根据这些定义来用心理解来消化。行为型设计模式着力解决的是类实体之间的通讯关系,希望以面向对象的方式描述一个控制流程。行为型设计模式种类比较多,其中观察者模式和访问者模式运用的比较多。模版模式:定义了一个算法步骤,并允许子类为一个或多个步骤提供实现。子类在不改变算法架构的情况下,可重新定义算法中某些步骤。观察者模式:定义了对象之间一对多的依赖,当这个对象的状态发生改变的时候,多个对象会接受到通知,有机会做出反馈。迭代子模式:提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示。责任链模式:很多对象由每一个对象对其下一个对象的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使系统可以在不影响客户端的情况下动态的重新组织链和分配责任。备忘录模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。命令模式:将请求及其参数封装成一个对象,作为命令发起者和接收者的中介,可以对这些请求排队或记录请求日志,以及支持可撤销操作。状态模式:允许一个“对象”在其内部状态改变的时候改变其行为,即不同的状态,不同的行为。访问者模式:表示一个作用于某对象结构中的各元素的操作。可以在不改变各元素的类的前提下定义作用于这些元素的新操作。解释器模式:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。中介者模式:用一个中介对象来封装一系列的对象交互。策略模式:定义一组算法,将每个算法都封装起来,并且使它们之间可以互换。策略模式使这些算法在客户端调用它们的时候能够互不影响地变化。因为是学时太少的原因,老师讲的模式并不多,这几个模式好多都没有讲,我们只能根据一些书籍和资料来学习。3、 模式分析对于工厂模式,是最常见的一种模式之一。在面向对象编程中, 常用的方法是用new操作符构造对象实例,但在有些情况下,new操作符直接生成对象会带来一些问题。创建对象之前必须清楚所要创建对象的类信息,但个别情况下无法达到此要求,譬如打开一个视频文件需要一个播放器对象,但是用户可能不知道具体播放器叫什么名字,需要系统分派给这个视频文件一个合适的播放器,这种情况下用new运算符并不合适。许多类型对象的创造需要一系列步骤,比如需要计算或取得对象的初始设置,需要选择生成哪个子对象实例,在生成需要对象之前必须先生成一些辅助功能对象。在这些情况, 新对象的建立就是一个 “过程”,而不仅仅是一个操作。为了能方便地完成这些复杂的对象创建工作,可引入工厂模式 。工厂模式的实例分析:/EventFactory类publicclassEventFactory:LogFactorypublicoverrideEventLogCreate()returnnewEventLog();/FileFactory类publicclassFileFactory:LogFactorypublicoverrideFileLogCreate()returnnewFileLog(); 客户程序有效避免了具体产品对象和应用程序之间的耦合,增加了具体工厂对象和应用程序之间的耦合,在类内部创建对象通常比直接创建对象更灵活,通过面向对象的手法,将具体对象的创建工作延迟到子类,提供了一种扩展策略,较好的解决了紧耦合问题。工厂模式客户端程序:publicclassApppublicstaticvoidMain(stringargs)LogFactoryfactory=newEventFactory();/FileFactoryfactory=newFileFactory();Loglog=factory.Create();log.Write();对于抽象工厂模式,在软件系统中,经常面临“一系列相互依赖对象”的创建工作,由于需求变化,这“一系列相互依赖的对象”也要改变,如何应对这种变化呢?如何像工厂模式一样绕过常规的”new”,提供一种“封装机制”来避免客户程序和这种“多系列具体对象创建工作”的紧耦合呢?其中有一种说法就是可以将这些对象一个个通过工厂模式来创建。但是,既然是一系列相互依赖的对象,它们是有联系的,每个对象都这样解决,如何保证他们的联系呢?所以运用抽象工厂模式,是一种有效的解决途径。抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。适用于一个系统独立于其产品创建、组合和表示时,一个系统由多个产品系列中的一个来配置时,强调一系列相关产品对象的设计以便进行联合时,提供一个产品类库,只想显示其接口而非实现时。抽象工厂模式的结构,如下图:图1 抽象工厂模式的结构抽象工厂模式与工厂模式的区别就在于工厂模式提供一个接口,用于创建相关和依赖对象的家族,而不需要明确指定具体类。抽象工厂模式允许客户使用抽象接口来创建一组相关产品,而不需要关心具体实际产出的产品是什么。对于适配器模式,是将一个类的接口,转换成客户期望的另一个接口,适配器让原本接口不兼容的类可以一起工作。打个比方说,一个team要为外界提供S类服务,但team里面没有能够完成此项任务的member,只有team外的A可以完成这项服务。为保证对外服务类别的一致性(提供S服务),一是将A招安到team内,负责提供S类服务,二是A不准备接受招安,可安排B去完成这项任务,并让B做好A的工作,让B工作的时候向A请教,此时,B是一个复合体(提供S服务,是A的继承弟子)。这种模式的使用过程是客户通过目标接口调用适配器的方法对适配器发出请求,适配器使用被适配者接口把请求转换成被适配者的一个或者多个调用接口,客户接收到调用的结果,但并未察觉这一切是适配器在起转换作用。就是将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的类可以一起工作。适配器模式有三种适用场合,一是使用一个已经存在的类,而它的接口不符合要求,二是创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作,三是使用一些已经存在的子类,但不可能通过子类化以匹配各自接口。对象适配器可以适配它的父类接口。适配器模式还分为了累适配器和对象适配器两种,这里就不再具体介绍了。适配器模式的优点就是方便设计者自由定义接口,不用担心匹配问题,而它的缺点是这个模式属于静态结构 ,由于只能单继承,所以不适用于多种不同的源适配到同一个目标。对于命令模式,将一个请求封装为一个对象,可用不同请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作。这种模式的适用性是抽象出待执行的动作以参数化某对象,在不同时刻指定、排列和执行请求,支持取消操作,支持修改日志,用构建在原语操作上的高层操作构造一个系统。命令模式的实现:public class Receiver /接收者 public void action() System.out.println(“我在行动); public interface Command /抽象命令 public abstract void execute();public class ConcreteCommand implements Command /具体命令 Receiver rcv; /含有接收者的引用 ConcreteCommand(Receiver rcv) this.rcv=rcv; public void execute() rcv.action(); /执行命令 public class Invoker /请求者 Command command; public void setCommand(Command command) mand=command; public void startExecuteCommand() command.execute(); public class Application /客户程序 public static void main(String args) Receiver r=new Receiver(); Command command=new ConcreteCommand(r); Invoker i=new Invoker(); i.setCommand(command); i.start

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论