您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 市场营销 > 23种java 设计模式
朱泽民计算机科学与技术学院zzm163com@163.com13995939009设计模式21什么是设计模式著名建筑师ChristopherAlexander说过:“每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复劳动”模式是指从某个具体的形式中得到的一种抽象,在特殊的非任意性的环境中,该形式不断地重复出现。一个软件体系结构的模式描述了一个出现在特定设计语境中的特殊的再现设计问题,并为它的解决方案提供了一个经过充分验证的通用图示。解决方案图示通过描述其组成构件及其责任和相互关系以及它们的协作方式来具体指定。31什么是设计模式Alexander的思想也同样适用于面向对象设计模式。两类模式的核心都在于提供了相关问题的解决方案。设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。设计模式并不仅是一种具体“技术”,它讲述的是思想,如同“三十六计”兵法一样。41什么是设计模式设计模式是人们对成功的,可供重复使用的设计经验的总结。学习设计模式使人们可以更加简单方便地复用成功的设计和体系结构。将已证实的技术表述成设计模式也会使新系统开发者更加容易理解其设计思路。设计模式帮助你做出有利于系统复用的选择,避免设计损害了系统复用性。设计模式之于面向对象系统的设计和开发的作用就有如数据结构之于面向过程开发的作用一般简而言之,设计模式可以帮助设计者更快更好地完成系统设计。51什么是设计模式一个好的模式必须做到以下几点:解决一个问题:从模式可以得到解,而不仅仅是抽象的原则或策略。是一个被证明了的概念:模式通过—个记录得到解.而不是通过理论或推测。描述了一种关系:模式并不仅仅描述模块,它给出更深层的系统结构和机理。模式有重要的人为因素:所有的软件服务于人类的舒适或生活质量,而最好的模式追求它的实用性和美学。62软件体系结构与模式模式的概念可大可小,广义的模式应该涵括:软件体系结构的模式类之间的设计模式各种语言的惯用法可以说,模式覆盖软件的方方面面。——FrankBuschmann,RegineMeunier,HansRohnert,PeterSommerlad著,面向模式的软件体系结构,机械工程出版社,2003782软件体系结构与模式体系结构体系结构模式代表了模式系统中最高等级模式,主要包括:Layers,PipesandFilters,Blackboard,Microkernel,Reflection等。一个特定的软件体系结构可能包含多个模式的应用,它们为软件系统提供了一个结构化的框架,具体的细化和实现工作还需要设计模式以及惯用法的支持。92软件体系结构与模式2.设计模式GrandyBooch(原Rational软件公司的首席科学家)在序言中写到:“所有结构良好的面向对象软件体系结构中都包含了许多模式。……。在系统开发阶段强调这种机制(模式的应用)的优势在于,它能使所生成的体系结构更加精巧、简洁和易于理解,其程度远远超过了未使用模式的体系结构。”体系结构的好坏直接决定了软件系统的命运。而模式的应用可以帮助建立有效的,出色的体系结构。102软件体系结构与模式3.惯用法惯用法是特定程序设计语言种的低层模式。它主要描述如何在特定语言中解决具体的实现问题。如计数指针在不同语言中的实现问题。一些基本的数据结构也可以认为是一种最底层的模式,如堆栈和队列的实现等等。113设计模式的组成一个设计模式命名、抽象和确定了一个通用设计结构的主要方面,这些设计结构能被用来构造可复用的面向对象设计。设计模式确定了所包含的类和实例,它们的角色、协作方式以及职责分配。每一个设计模式都集中于一个特定的面向对象设计问题或设计要点,描述了什么时候使用它,在另一些设计约束条件下是否还能使用,以及使用的效果和如何取舍。123设计模式的组成设计模式的基本成分一般而言,一个模式有四个基本要素——模式名称问题解决方案效果133设计模式的组成模式名称(patternname)一个助记名,它用一两个词来描述模式的问题、解决方案和效果。问题(problem)描述了应该在何时使用模式。它解释了设计问题和问题存在的前因后果,它可能描述了特定的设计问题,如怎样用对象表示算法等。也可能描述了导致不灵活设计的类或对象结构。有时候,问题部分会包括使用模式必须满足的一系列先决条件。143设计模式的组成解决方案(solution)描述了设计的组成成分,它们之间的相互关系及各自的职责和协作方式。因为模式就像一个模板,可应用于多种不同场合,所以解决方案并不描述一个特定而具体的设计或实现,而是提供设计问题的抽象描述和怎样用一个具有一般意义的元素组合(类或对象组合)来解决这个问题。效果(consequences)描述了模式应用的效果及使用模式应权衡的问题。153设计模式的组成设计模式的描述见:设计模式迷你手册.chmErichGamma博士等人采用下面的固定模式来描述:模式名和分类:模式名简洁地描述了模式的本质。模式的分类反映了将在后面介绍的方案。意图:设计模式是做什么的?它的基本原理和意图是什么?它解决的是什么样的特定设计问题?动机:用以说明一个设计问题以及如何用模式中的类、对象来解决该问题的特定情景。该情景会帮助你理解随后对模式更抽象的描述。163设计模式的组成适用性:什么情况下可以使用该设计模式?该模式可用来改进哪些不良设计?你怎样识别这些情况?结构:采用基于对象建模技术对模式中的类进行图形描述。使用了交互图来说明对象之间的请求序列和协作关系。参与者:指设计模式中的类和/或对象以及它们各自的职责。协作:模式的参与者怎样协作以实现它们的职责。效果:模式怎样支持它的目标?使用模式的效果和所需做的权衡取舍?系统结构的哪些方面可以独立改变?173设计模式的组成实现:实现模式时需要知道的一些提示、技术要点及应避免的缺陷,以及是否存在某些特定于实现语言的问题。代码示例:用来说明怎样用Java或其它语言实现该模式的代码片段。已知应用:实际系统中发现的模式的例子。相关模式:与这个模式紧密相关的模式有哪些?其间重要的不同之处是什么?这个模式应与哪些其他模式一起使用?184设计模式的编目《设计模式:可复用面向对象软件的基础》(ErichGamma,RichardHelm,RalphJohnson,JohnVlissides著,2000)是有关设计模式的最经典的文献之一。GoF(GangofFour)——ErichGamma、RichardHelm、RalphJohnson、JohnVlissides——“四人帮”它总结了目前最经典的23种设计模式,并将它们分类为创建型模式,结构型模式和行为模式。194设计模式的编目设计模式目录分类根据模式目的来分,即模式是用来完成什么工作的,可分为——创建型模式:与对象的创建有关;即抽象的实例化过程结构型模式:如何组合类和对象以获得更大的结构;行为型模式:涉及到算法和对象间职责的分配。204设计模式的编目根据模式的范围分,指定模式主要是用于类还是用于对象。类模式处理类和子类之间的关系,这些关系通过继承建立,是静态的,在编译时刻便确定下来了。对象模式处理对象间的关系,这些关系在运行时刻是可以变化的,更具动态性。从某种意义上来说,几乎所有模式都使用继承机制,所以“类模式”只指那些集中于处理类间关系的模式,而大部分模式都属于对象模式的范畴。214设计模式的编目22PurposeCreationalStructuralBehavioralClassFactoryMethodAdapterInterperterScopeObjectAbstractFactoryBuilderPrototypeSingletonAdapterBridgeCompositeDecoratorFacadeFlyweightProxyChainofResponsibilityCommandIteratorMediatorMomentoObserverStateStrategyVistor设计模式的分类及其相互间关系华南理工大学231、创建型设计模式创建型模式隐藏了对象创建的具体细节,使程序代码不依赖具体的对象。创建型类的模式有工厂方法(FactoryMethod)模式;创建型对象模式包括抽象工厂(AbstractFactory)、建造(Builder)、原型(Prototype)、单例(Singleton)四种模式。设计模式的分类及其相互间关系华南理工大学242、结构型设计模式结构型模式描述类和对象之间通过组织形成新的结构,以实现新的功能。结构型的类模式采用继承机制来组合类,如适配器(Adapter)类模式;结构型的对象模式则描述了对象的组装方式,如适配器(Adapter)对象模式、桥接(Bridge)模式、组合(Composite)模式、装饰(Decorator)模式、外观(Facade)模式、享元(Flyweight)模式、代理(Proxy)模式等。设计模式的分类及其相互间关系华南理工大学253、行为型设计模式行为型设计模式描述算法以及对象之间的任务(职责)分配及它们之间的通讯模式。行为型的类模式用继承方法完成,有模板方法模式和解释器模式;行为型的对象模式使用对象复合方法而不是继承,它描述一组对象怎样协作完成单个对象所无法完成的任务,如职责链(ChainofReponsibility)模式、命令(Command)模式、迭代器(Iterator)模式、中介者(Mediator)模式、备忘录(Memento)模式、观察者(Observer)模式、状态(State)模式、策略(Strategy)模式、访问者(Visitor)模式等。4设计模式的编目AbstractFactory:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。Adapter:将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。Bridge:将抽象部分与它的实现部分分离,使它们都可以独立地变化。Builder:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。ChainofResponsibility:为解除请求的发送者和接收者之间耦合,而使多个对象都有机会处理这个请求。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它。264设计模式的编目Command:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可取消的操作。Composite:将对象组合成树形结构以表示“部分-整体”的层次结构。Composite使得客户对单个对象和复合对象的使用具有一致性。Decorator:动态地给一个对象添加一些额外的职责。就扩展功能而言,Decorator模式比生成子类方式更为灵活。Facade:为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。274设计模式的编目FactoryMethod:定义一个用于创建对象的接口,让子类决定将哪一个类实例化。FactoryMethod使一个类的实例化延迟到其子类。Flyweight:运用共享技术有效地支持大量细粒度的对象。Interpreter:给定一个语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。Iterator:提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示。284设计模式的编目Mediator:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。M
本文标题:23种java 设计模式
链接地址:https://www.777doc.com/doc-4486246 .html