chp8-设计模式实例_第1页
chp8-设计模式实例_第2页
chp8-设计模式实例_第3页
chp8-设计模式实例_第4页
chp8-设计模式实例_第5页
已阅读5页,还剩149页未读 继续免费阅读

下载本文档

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

文档简介

1、电子科技大学电子科技大学 计算机学院计算机学院. .软件学院软件学院1TP-154n创建型模式创建型模式q以灵活的方式创建对象的集合以灵活的方式创建对象的集合n结构型模式结构型模式q代表相关对象的集合,代表相关对象的集合,q如何正确地组合类或对象如何正确地组合类或对象n行为型模式行为型模式q在对象集合中捕获行为,在对象集合中捕获行为,q解决类或对象之间如何交互和如何分配职责的问题解决类或对象之间如何交互和如何分配职责的问题2TP-154n有助于我们设计包含对象集的应用程序,从单有助于我们设计包含对象集的应用程序,从单一的代码中创建几个可能的集合一的代码中创建几个可能的集合q运行时可以创建集合的

2、多个版本运行时可以创建集合的多个版本q约束创建的对象:比如确保类只有一个实例约束创建的对象:比如确保类只有一个实例nFactory nAbstract Factory nPrototype nSingleton n3TP-154在运行时以灵活的方法创建对象,这些对象是构造在运行时以灵活的方法创建对象,这些对象是构造方法不能单独提供的方法不能单独提供的Factory的目标是处理简单的创建性情况;的目标是处理简单的创建性情况;Use methods to return required objects.通过通过使用返回对象的方法使用返回对象的方法来创建希望的对象来创建希望的对象客户类和工厂类分开。

3、消费者任何时候需要某客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。种产品,只需向工厂请求即可。Factory设计模式设计模式4TP-154Factory design patternMyClass createObjectOfRequiredClass(): RequiredClass create objectRequiredClassClientRequiredClass类和类和MyClass类可以是同一类或同种类类可以是同一类或同种类MyClass类可以拥有一个静态工厂方式创建自身的一个实例类可以拥有一个静态工厂方式创建自身的一个实例5TP-154Applicati

4、onof FactorydesignpatternBMW createAutomobile()BYD createAutomobile()Automobile createAutomobile(): AutomobileClientcreate objectcreate object运行时,通过方法返回运行时,通过方法返回一个新的所需对象!一个新的所需对象!6TP-154createObjectOfRequiredClass():MyClass:ClientRequiredClass():RequiredClass7TP-154从一个单一的控制代码版本中,产生一个适合各种用户的从一个单一的控制

5、代码版本中,产生一个适合各种用户的邮件信息邮件信息USE CASE: 询问顾客类型;用户选择类型;程序向控制台回询问顾客类型;用户选择类型;程序向控制台回送顾客类型,打印送顾客类型,打印Email信息信息8TP-154p通过分离代码段,程序适用于所有顾客类型;通过分离代码段,程序适用于所有顾客类型;p可以更容易地检查设计的正确性和重用部分!可以更容易地检查设计的正确性和重用部分!9TP-154Application of Factory design patternCustomer getMessage()ClientsendMessage()Frequent getMessage()Retu

6、rning getMessage()Curious getMessage()Newbie getMessage()MailMessagetextMailGenerationApplicationgetCustomerTypeFromUser()setup10TP-154n当单独使用构造方法不适用于对象的创建时,当单独使用构造方法不适用于对象的创建时,就使用返回对象的方法就使用返回对象的方法nFactory是是DP的委托形式,每个工厂方法都是的委托形式,每个工厂方法都是将创建责任委托给构造方法将创建责任委托给构造方法n工厂模式通过确保创建的类服从于某种约束,工厂模式通过确保创建的类服从于某种约束

7、,从而增强了程序的健壮性。从而增强了程序的健壮性。11TP-154提供一个创建互相关联对象的族或者相互依赖对象提供一个创建互相关联对象的族或者相互依赖对象的接口;不指明它们的具体类。的接口;不指明它们的具体类。族或者风格,族或者风格,Style?Abstract Factory Design PatternAgain设计一个应用程序,在这个应用程序中,有几种可设计一个应用程序,在这个应用程序中,有几种可能的对象集合风格,使用协同的工厂方法捕获这些能的对象集合风格,使用协同的工厂方法捕获这些风格!风格!12TP-154StylegetComponentA()getComponentB()Clie

8、ntdoOperation( Style myStyle )Style1getComponentA()getComponentB()Style2getComponentA()getComponentB()ComponentA ComponentBStyle1ComponentAStyle1ComponentBStyle2ComponentAStyle2ComponentBCollection13TP-154KitchenStylegetWallCabinet()getFloorCabinet()KitchengetWallCabinet()getFloorcabinet()Clientrend

9、erKitchen( KitchenStyle )ModernKStylegetWallCabinet()getFloorCabinet()AntiqueKStylegetWallCabinet()getFloorCabinet()WallCabinet FloorCabinet ModernWallCabinetModernFloorCabinetAntiqueWallCabinetAntiqueFloorCabinet14TP-154- Enter title:My Life- Enter Heading or “-done”:Birth- Enter text:I was born in

10、 a small mountain hut .- Enter Heading or “-done”:Youth- Enter text:I grew up playing in the woods - Enter Heading or “-done”: Adulthood. - Enter Heading or “-done”: -done(continued)15TP-154. Enter the style you want displayed:big- TITLE: MY LIFE -SECTION 1. - BIRTH - I WAS BORN IN A MOUNTAIN HUT .S

11、ECTION 2. - YOUTH -I GREW UP STURDY SECTION 3. - ADULTHOOD - . Enter the style you want displayed:smallmy lifebirthi was born in a mountain hut .youthi grew up sturdy adulthoodOption 2Option 116TP-154Abstract Factory*Style.ClientStyleAFactoryStyleBFactoryEnsemblesetAbstractFactory()doAFunction()Abst

12、ractFactorygetAPart1Object()getAPart2Object()* relationships within pattern application not shown集合体:客户代码可以访问的使用风集合体:客户代码可以访问的使用风格构造的实体格构造的实体17TP-154Application of Abstract FactoryClientSmallStyleLargeStyleStyleDocumentsetStyle()display(). . . . . . .1集合体集合体Ensemble角色角色18TP-154风格的确定依赖于用户输入风格的确定依赖于用户

13、输入19TP-154nMain(), get Title, Heading, Text from users input;nCreate Document Object-documentnStyle SelectionnSet Parameters to document.nInteracting with the Object.nMaybe: document.display()20TP-154DocumentgetAHeading()getATitle()getDocumentFromUser()createSmallStylegetAHeading()getATitle()LargeSt

14、ylegetAHeading()getATitle()TitlevalueHeadingvalueLargeHeadingdisplay()SmallHeadingdisplay()LargeTitledisplay()SmallTitledisplay()Textvalue10.n0.nStylegetAHeading()getATitle()DisplayableDisplayabledisplay()ClientgetStyleFromUser()displayDocument()style21TP-154Style.AbstractFactorygetAPart1Object()get

15、APart2Object()StyleAFactoryStyleBFactoryabstractFactory1EnsemblesetStyleA() setStyleB()Client. . . .22TP-154nFactory:客户类和工厂类分开。客户只需向:客户类和工厂类分开。客户只需向工厂请求即可。消费者无须修改就可以接纳新工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相产品。缺点是当产品修改时,工厂类也要做相应的修改。如:如何创建及如何向客户端提供应的修改。如:如何创建及如何向客户端提供nAbstract Factory:核心工厂类不再负责所有产核心

16、工厂类不再负责所有产品的创建,而是将具体创建的工作交给子类去品的创建,而是将具体创建的工作交给子类去做,成为一个抽象工厂角色,仅负责给出具体做,成为一个抽象工厂角色,仅负责给出具体工厂类必须实现的接口工厂类必须实现的接口23TP-154- when a class has exactly one instance.24TP-154单例设计模式单例设计模式确保只有一个类的实例确保只有一个类的实例在应用程序的任何地方都可获得此实例在应用程序的任何地方都可获得此实例Design Pattern Summary使类的构造方法私有化;使类的构造方法私有化;定义一个类型为此类的私有静态属性;定义一个类型为

17、此类的私有静态属性;定义一个公有的存取方法。定义一个公有的存取方法。Singleton25TP-154Singleton Design PatternMyClass getSingletonOfMyClass(): MyClass Client1singletonOfMyClassstatic26TP-154The Singleton Design Pattern - applied to MyClass1.定义一个私有的、静态的、不变的定义一个私有的、静态的、不变的MyClass类的成类的成员变量员变量private static MyClass singletonOfMyClass = n

18、ew MyClass(); 2.使使MyClass 类的构造方法类的构造方法privateprivate MyClass() /* . constructor code . */ ;3.Define a public static method to access the memberpublic static MyClass getSingletonOfMyClass() return singletonOfMyClass;27TP-154Runtime getSingletonRuntime(): Runtime ClientSingletonRuntime1static每个每个JAVA程

19、序都有一个单一的程序都有一个单一的Runtime实例实例-Singleton类类这个实例允许应用程序在运行环境相互联系这个实例允许应用程序在运行环境相互联系可以通过可以通过getRuntime()方法获取当前的方法获取当前的Runtime实例实例28TP-154只有一个单态对象和这个对象能在应用程只有一个单态对象和这个对象能在应用程序中任何地方被访问都很重要!序中任何地方被访问都很重要!想想游戏中的玩家想想游戏中的玩家PlayerPlayer类的设计(共同类的设计(共同存取的一致性)存取的一致性)29TP-154创建一系列几乎相同的对象,其类型在运创建一系列几乎相同的对象,其类型在运行时确定行

20、时确定假定原型实例已知,当需要一个新的实例假定原型实例已知,当需要一个新的实例时,克隆此原型时,克隆此原型运用于运用于多实例设计多实例设计,使用原型克隆产生关,使用原型克隆产生关键特征相同的多个实例键特征相同的多个实例30TP-154Graphics courtesy CORELClick on choice of storage:Click on choice of chair:Click on choice of desk:Furniture colorFurniture hardware typecolonial并非选择统一的办公并非选择统一的办公室风格室风格抽象工厂抽象工厂每个组件都可

21、选,独每个组件都可选,独立。立。31TP-154A Simplified Prototype Example Another Choice 32TP-154nAbstract Factory:一种整体的办公室风格!:一种整体的办公室风格!q协调和匹配灵活性不够,仍然需要协调和匹配灵活性不够,仍然需要q对于单个的桌子或椅子有多种风格的处理对于单个的桌子或椅子有多种风格的处理nPrototype:希望能够分别选择任意的桌子风:希望能够分别选择任意的桌子风格、椅子风格和柜子风格格、椅子风格和柜子风格q可以在一种或者另一种可以在一种或者另一种style中创建复杂对象中创建复杂对象33TP-154Ens

22、emblecreateEnsemble()ClientPart1clone()Part2clone()(optional part of interface)Case:OfficeSuitecreateOfficeSuite(Desk aDesk, Chair aChair, Storage aStorage);Create方法处理通用类,而不是具体对象;方法处理通用类,而不是具体对象;34TP-154Prototype Design PatternEnsemblecreateEnsemble()ClientMyPartclone(): MyPartMyPartStyleAclone()MyP

23、artStyleBclone()myPartPrototype1/ To create a MyPart instance:MyPart p = myPartPrototype.clone();35TP-154EnsemblecreateEnsemble()ClientPart1clone()Part2clone()Part1StyleAclone()Part1StyleBclone()Part2StyleAclone()Part2StyleBclone()part1Prototypepart2Prototype11./ To create a Part1 object:Part1 p1 =

24、part1Prototype.clone();.Part1StyleB returnObject = new Part1StyleB();.Part1StyleCclone()36TP-15437TP-154OfficeProcessdoAProcess()HiVolCustomer clone()LoVolCustomerclone()Customerclone(): CustomercustomerPrototypeClient1MedVolCustomerclone()运行时创建的静态运行时创建的静态Customer对象对象.不同不同 类型类型Customer容易的增删改以适应需求变化!

25、容易的增删改以适应需求变化!38TP-154n通过给出一个原型对象来指明所要创建的对象通过给出一个原型对象来指明所要创建的对象的类型,然后用复制这个原型对象的方法创建的类型,然后用复制这个原型对象的方法创建出更多同类型的对象。原始模型模式允许动态出更多同类型的对象。原始模型模式允许动态的增加或减少产品类。的增加或减少产品类。n缺点是每一个类都必须配备一个克隆方法。缺点是每一个类都必须配备一个克隆方法。39TP-154Use Creational Design Patterns when creating complex objectsnFactory when creating individ

26、ualsnAbstract Factory when creating familiesnPrototype to “mix & match”nSingleton for exactly one, safely40TP-15441TP-154n创建型模式创建型模式q以灵活的方式创建对象的集合以灵活的方式创建对象的集合n结构型模式结构型模式q代表相关对象的集合,代表相关对象的集合,q如何正确地组合类或对象如何正确地组合类或对象n行为型模式行为型模式q在对象集合中捕获行为,在对象集合中捕获行为,q解决类或对象之间如何交互和如何分配职责的问题解决类或对象之间如何交互和如何分配职责的问题42T

27、P-154nFacade nDecorator nComposite nAdapter nFlyweight nProxy 43TP-154门面型设计模式门面型设计模式Provide an interface to a package of classes为子系统中的一组接口提供一个一致的界面,为子系统中的一组接口提供一个一致的界面, FacadeFacade模式定义了一个高层接口,这个接口使得这模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。一子系统更加容易使用。* *为类包提供接口为类包提供接口Faade对象通常是对象通常是SingletonSingleton模式模式Facad

28、eNotes: the classes need not be organized as a package; more than one class may be used for the faade.44TP-154Cnot exposedmyCMethod() FaadeexposedcMethodOfFacade()Client12Client不能直接引用不能直接引用C调用由调用由1和和2替代替代45TP-154nFacade类向公众开放,通常是单一类向公众开放,通常是单一Singletonn隐藏包中其他所有类隐藏包中其他所有类nFacade类调节与包中所有其他对象的通信类调节与包中所

29、有其他对象的通信n可以方便的组织开发,内部开发对可以方便的组织开发,内部开发对Client端的端的屏蔽屏蔽n只有一个类提供对一个类集的功能性访问,降只有一个类提供对一个类集的功能性访问,降低开发复杂性!低开发复杂性!46TP-154MyGameCharactersMyGameEngineMyGameCastfacadeMyGamefacadeMyGameEnvironmentMyGameEnvironmentfacade47TP-154bankCustomersClientmain() facadeBankCustomersdoDeposit( int amt, Customer cust,

30、Account acc )getBankAccount( Customer cust, int accNum )getBankCustomer( String custName )introduceApplication()BankCustomerBankAccountCustomergetCustomerName()getNumAccounts()getPersonalNote()getAccount( int )AccountgetAccountNum()deposit( int )getBalance()1.nIntroMessageframeworkAccountExceptionCu

31、stomerException48TP-154- modularizes designs by hiding complexity -隐藏复杂性的组件化设计隐藏复杂性的组件化设计-外部与一个子系统的通信必须通过一个外部与一个子系统的通信必须通过一个统一的门面对象进行。门面模式提供一统一的门面对象进行。门面模式提供一个高层次的接口,使得子系统更易于使个高层次的接口,使得子系统更易于使用。每个子系统只有一个门面类,而且用。每个子系统只有一个门面类,而且此门面类只有一个实例。但整个系统可此门面类只有一个实例。但整个系统可以有多个门面类。以有多个门面类。49TP-154装饰设计模式装饰设计模式Add

32、responsibilities to an object at runtime.运行时负责添加或删除类运行时负责添加或删除类以对客户端透明的方式扩展对象的功能,是继承以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案,提供比继承更多的灵活性。关系的一个替代方案,提供比继承更多的灵活性。动态给一个对象增加动态给一个对象增加/ /删除功能,增加由一些基删除功能,增加由一些基本功能的排列组合而产生的非常大量的功能。本功能的排列组合而产生的非常大量的功能。Decorator50TP-154n抽象组件(抽象组件(Component)给出一个抽象接口,给出一个抽象接口,以规范准备接收附加责任的

33、对象以规范准备接收附加责任的对象n具体组件(具体组件(Substance)定义一个将要添加附定义一个将要添加附加责任的类加责任的类n装饰组件(装饰组件(Decorator)负责给具体组件对象负责给具体组件对象添加附加的责任(功能)添加附加的责任(功能) 51TP-154ClientobjDecoratedDecorationdoAction()1SubstancedoAction()Componentadd( Component )doAction()void doAction() . / do actions special to this decoration objDecorated.d

34、oAction(); / pass along 具体组件抽象组件装饰组件52TP-154n顾客可以开设不同类型的账户顾客可以开设不同类型的账户n应用程序列出可用的账户类型,客户选择应用程序列出可用的账户类型,客户选择n重复过程,直至用户退出重复过程,直至用户退出53TP-154ClientnextComponentAccountdescribe()1Customerdescribe()BankingComponentadd( Component )describe()CheckAccountdescribe()getLastCheckNum(): intSavingsAccountdescri

35、be()getInterestRate(): intCDAccountdescribe()getDuration(): intSetupAttemptToAddBadBankingComponentException灵活性:运行时创建或删除顾客的账户灵活性:运行时创建或删除顾客的账户具体组件修饰过程54TP-154- allows addition to and removal from objects at runtime - 动态地给对象添加或删除一些额外动态地给对象添加或删除一些额外的功能的功能55TP-154合成设计模式合成设计模式Represent a Tree of Objects

36、Design Pattern Summary合成模式将对象组织到树结构中,可以合成模式将对象组织到树结构中,可以用来描述整体与部分的关系。用来描述整体与部分的关系。Composite56TP-154NonLeafNodeComponent“包含的每个对象包含的每个对象都是都是 Component对象对象”“非叶节点有一个或非叶节点有一个或更多的组件更多的组件”leaf nodenon-leaf nodeObjectsClasses1.n57TP-154NonLeafNodedoIt()ponentComponentadd( Component )doIt()LeafNodedoIt()Type

37、ANonLeafNodedoIt()TypeBNonLeafNodedoIt()1.nClient非叶节点:驱动每个聚合对象非叶节点:驱动每个聚合对象执行执行 e.doIt()唯一接口唯一接口58TP-154:LeafNodenonLeaf1ChildX:NonLeafNodenonLeaf1ChildX:NonLeafNodeSequence Diagram for Composite:ClientdoIt()nonLeaf1:NonLeafNodedoIt()doIt()nonLeaf1ChildX:NonLeafNode:LeafNode:LeafNode59TP-154Pete:Pre

38、sidentAble:ManagerBecky:ManagerLonny:TellerCal:ClerkTina:TellerThelma:Teller60TP-154ClientreportsSupervisoradd(Employee)EmployeestateName()1.nSetupClerkstateName()PresidentstateName()TellerstateName()ManagerstateName()61TP-154ComponentContainerWindow . .component1.nCanvas62TP-154Component0nchildren6

39、3TP-154- used to represent trees of objects.-合成模式用于处理对象的树结构。合成模式用于处理对象的树结构。64TP-154适配器设计模式适配器设计模式Allow an application to use external functionality in a retargetable manner.将一个类的接口转换成客户希望的另外一个将一个类的接口转换成客户希望的另外一个接口。接口。AdapterAdapter模式使得原本由于接口不兼模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。容而不能一起工作的那些类可以一起工作。重定向:允许应

40、用程序以重定位方式访问外重定向:允许应用程序以重定位方式访问外部功能;部功能;Adapter65TP-154ClientAbstractClassclientNameForRequiredMethod()AdapterclientNameForRequiredMethod() adaptee. requiredMethod();adapteeRequiredClassrequiredMethod()66TP-154Sequence Diagram for Adapter:ClientclientNameForRequiredMethod():AbstractClass:AdapterRequi

41、redMethod()adaptee:RequiredClass67TP-154Financialamount()PrinciplecomputeValue()Client原有系统Adaptation 适配过程应用FinancialAdapteramount()legacyAdapteelegacyAputeValue(); FinancialAdapter继承了继承了Finacial,聚合了原有,聚合了原有Principal类类68TP-154ClientAbstractClassstandinForRequiredMethod()AdapterstandinForRequiredMetho

42、d() requiredMethod();RequiredClassrequiredMethod()69TP-154- to interface flexibly with external functionality.-灵活地与外部功能相关联;灵活地与外部功能相关联;-维护的价值,不必修改多处代码;维护的价值,不必修改多处代码; 70TP-154享元设计模式享元设计模式Manage a large number of objects without constructing them all.管理大量极为相似的类;管理大量极为相似的类;运用共享技术有效的支持大量细粒度的对象,即运用共享技术有

43、效的支持大量细粒度的对象,即在一个系统中如果有多个相同的对象,那么只共在一个系统中如果有多个相同的对象,那么只共享一份就可以了,不必为每一次出现都单独创建享一份就可以了,不必为每一次出现都单独创建一个对象。一个对象。_ _节省空间资源,改善系统性能节省空间资源,改善系统性能Flyweight71TP-154FlyweightFlyweightdoAction(Context)ConcreteFlyweightdoAction(Context)FlyweightFactorygetFlyweight(Characteristic)Client1.n享元模式需要维护一个记录所有享元的哈希表-对象池

44、,也需耗费一定的资源72TP-15473TP-154Flyweights (1 each)Line for outputUse string to determine which flyweight . Use color information to form the context (parameter value).Make (shared) BigA, BigB, flyweight object available to clientsClient ResponsibilitiesDP Responsibilitiesvvvvvv v-red-vvvvvvv. . . . . .bi

45、gA:BigAbigB:BigBvvvvvv vblackvvvvvvvgetMatrix( ”red” )getMatrix( “black” )color “RED” begins 0 对象外蕴状态(客户持有)ABBRA CADABBRA 对象的内蕴状态74TP-154Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.75TP-154Application of FlyweightBigCharconstructionC

46、hargetMatrix( String color )BigCharFactorygetFlyweight( char )PagePrinter26singletonBigBsingletonBigAAdapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.76TP-154n享元模式在一般的项目开发中并不常用,而常应享元模式在一般的项目开发中并不常用,而常应用于系统底层开发,解决系统性能问题。用于系统底层开发,解决系统性能问题。n

47、Java和和.Net中的中的String类型使用享元模式:如果在类型使用享元模式:如果在Java或者或者.NET中已经创建了一个字符串对象中已经创建了一个字符串对象s1,那么下次再创建相同的字符串那么下次再创建相同的字符串s2的时候,系统只的时候,系统只是把是把s2的引用指向的引用指向s1所引用的具体对象,实现相所引用的具体对象,实现相同字符串在内存中共享。同字符串在内存中共享。nEJB采用采用pooling方式管理线程和数据库连接?方式管理线程和数据库连接?77TP-154- to obtain the benefits of a large set of individual object

48、s without efficiency penalties.- - 在不损失效率的前提下获得大量单个在不损失效率的前提下获得大量单个对象集合的优势;对象集合的优势; 78TP-154代理设计模式代理设计模式Avoid the unnecessary execution of expensive functionality in a manner transparent to clients.以对客户端透明的方式,避免执行不必要并且开以对客户端透明的方式,避免执行不必要并且开销很大的功能销很大的功能在开销较大的功能处插入一个可访问的类在开销较大的功能处插入一个可访问的类代理的理解?代理的理解?

49、Proxy79TP-154AdaptationBaseActiveClassexpensiveMethod()anotherMethod() RealActiveClassexpensiveMethod()anotherMethod() ProxyexpensiveMethod()anotherMethod() Client realActiveObject. . . / One way to check if really needed:if ( realActiveObject = null ) / never referenced realActiveObject = getRealAc

50、tiveObject(); realActiveObject.expensiveMethod(); else / try to avoid calling the real expensiveMethod()使用使用Proxy 对象对象进行实例化进行实例化必要时创建必要时创建80TP-154realExpensiveMethod()Sequence Diagram for Proxy:ClientexpensiveMethod():Proxy:RealActiveClass( if needed: )欺骗性方法欺骗性方法81TP-154- to call expensive or remote

51、 methods.- 可以显著提高效率可以显著提高效率 的设计模式的设计模式- Internet对象系统的开发多数使用对象系统的开发多数使用Proxy模式,将本地类指派为代理进行模式,将本地类指派为代理进行远程处理远程处理82TP-154Structural Design Patterns relate objects (as trees, lists etc.)nFacade :门面模式给对象的集合提供了接口:门面模式给对象的集合提供了接口nDecorator 装饰模式在运行时增加对象,动态修饰装饰模式在运行时增加对象,动态修饰nComposite 合成模式表示对象的树型结构合成模式表示对象

52、的树型结构nAdapter 适配器模式简化外部功能的使用适配器模式简化外部功能的使用nFlyweight 享元模式通过使用多重实例来最小化空间消耗享元模式通过使用多重实例来最小化空间消耗nProxy 代理模式代理模式 避免不必要的调用大开销操作避免不必要的调用大开销操作83TP-154电子科技大学电子科技大学 计算机学院计算机学院. .软件学院软件学院84TP-154n创建型模式创建型模式q以灵活的方式创建对象的集合以灵活的方式创建对象的集合n结构型模式结构型模式q代表相关对象的集合,代表相关对象的集合,q如何正确地组合类或对象如何正确地组合类或对象n行为型模式行为型模式q在对象集合中捕获行为

53、,在对象集合中捕获行为,q解决类或对象之间如何交互和如何分配职责的问题解决类或对象之间如何交互和如何分配职责的问题85TP-154nInterpreternIteratornMediatornObservernStatenChain of ResponsibilitynCommandnTemplate86TP-154RequirementsAnalysisDesignImplementationArchitectureFrameworkDetailed DesignxKey:= secondary emphasisx = main emphasis87TP-154停泊停泊to 码头 obsta

54、cles88TP-154Customs应用应用: 可单独重用可单独重用 Ship ShipWorkmanShipTugboat1.n1港口应用港口应用目标:重用性目标:重用性*希望在其他应用中能分希望在其他应用中能分别使用别使用Ship和和Tugboat类类89TP-154ShipTugboatLeavingPortestimateTime()*控制着控制着Ship和和Tugboat类类的对象行为如何来为整个的对象行为如何来为整个过程计算时间。过程计算时间。EnteringPortestimateTime()BeingMaintainedestimateTime()90TP-154重用的实现重

55、用的实现ShipTugboatVesselPortMissionestimateTime()LeavingPortestimateTime()EnteringPortestimateTime()BeingMaintainedestimateTime()Mediator base class91TP-154p捕捉对象中的行为,包装了一系列对象相捕捉对象中的行为,包装了一系列对象相互作用的方式互作用的方式p在对象中封装行为在对象中封装行为 ,使得这些对象不必相,使得这些对象不必相互明显作用。互明显作用。p将对象的行为和协作抽象化将对象的行为和协作抽象化92TP-154解释器设计模式解释器设计模式分

56、析表达式分析表达式, 应用程序处理表达式的语法问题应用程序处理表达式的语法问题使用一个递归的设计模式形式表使用一个递归的设计模式形式表示语法;示语法;将解释传递到聚合对象;将解释传递到聚合对象;Interpreter93TP-154n给定一个语言后,解释器模式可以定义出其文法的一给定一个语言后,解释器模式可以定义出其文法的一种表示,并同时提供一个解释器。客户端可以使用这种表示,并同时提供一个解释器。客户端可以使用这个解释器来解释这个语言中的句子。个解释器来解释这个语言中的句子。n描述怎样在有了一个简单的文法后,使用模式设计解描述怎样在有了一个简单的文法后,使用模式设计解释这些语句。所提到的语言

57、是指任何解释器对象能够释这些语句。所提到的语言是指任何解释器对象能够解释的任何组合。解释的任何组合。n模式中需要定义一个代表文法的命令类的等级结构,模式中需要定义一个代表文法的命令类的等级结构,也就是一系列的组合规则。每一个命令对象都有一个也就是一系列的组合规则。每一个命令对象都有一个解释方法,代表对命令对象的解释。解释方法,代表对命令对象的解释。XML解析器?解析器?94TP-154AbstractExpressioninterpret()ClientTerminalExpressioninterpret()NonTerminalExpressioninterpret()1.n递归分析树的根

58、节点递归分析树的根节点表达式的复杂造成表达式的复杂造成Interpreter设计的递归形式设计的递归形式95TP-154260Mhz & 64MB 400Mhz & 128MB 260Mhz & 32MB 装配过程装配过程 . 网络系统的顾客订单表达:网络系统的顾客订单表达:(260 64) (400 128)(260 32)96TP-15497TP-15498TP-15499TP-154Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003

59、), with permission.100TP-154把网络订单的每部分过程进行分解!把网络订单的每部分过程进行分解!101TP-154Componentassemble()Computerassemble()NetSystemassemble()component1component2RAMdescribe()CPUdescribe()cpuramClientSetupgetInputFromUser()parse()10.1102TP-154- 分析的一种形式和处理表达式的一种方法分析的一种形式和处理表达式的一种方法. .103TP-154迭代设计模式迭代设计模式提供一种访问聚合对象的元

60、素并且不暴露其基本表提供一种访问聚合对象的元素并且不暴露其基本表示的方法示的方法访问集合中的成员访问集合中的成员数组数组a(i)?向量)?向量elementAt(i)?)?Encapsulate the iteration in a class pointing (in effect) to an element of the aggregate. Iterator104TP-154q- 给定一个对象的集合,给定一个对象的集合,e.g.,qthe videos in a video storeqAggregate objectsq- 用指定的方式处理全部对象用指定的方式处理全部对象 e.g.,q “list in alph

温馨提示

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

评论

0/150

提交评论