设计模式复习资料.docx
- 文档编号:26606129
- 上传时间:2023-06-20
- 格式:DOCX
- 页数:18
- 大小:223.27KB
设计模式复习资料.docx
《设计模式复习资料.docx》由会员分享,可在线阅读,更多相关《设计模式复习资料.docx(18页珍藏版)》请在冰豆网上搜索。
设计模式复习资料
创建型设计模式
FactoryMethod(virtualconstructor)
1.Aliases:
virtualconstructor
2.Intent
a.Defineaninterfaceforcreatinganobject,butletsubclassesdecidewhichclasstoinstantiate.FactoryMethodletsaclassdeferinstantiationtosubclasses.
3.Motivation
a.Frameworksuseabstractclassestodefineandmaintainrelationshipsbetweenobjects.Aframeworkisoftenresponsibleforcreatingtheseobjectsaswell.
4.Struct
5.Participants
a.Product、ConcreteProduct、Creator、ConcreteCreator
6.使用场景:
a.当一个类不知道它要创建何种方法时
b.当一个类想要它的子类明确指定它要创建的类时
c.Classesdelegateresponsibilitytooneofseveralhelpersubclasses,andyouwanttolocalizetheknowledgeofwhichhelpersubclassisthedelegate.
7.Evaluation
a.多态性:
客户代码可以做到与特定应用无关,适用于任何实体类
b.缺点:
需要Creator和相应的子类作为factorymethod的载体,如果应用模型确实需要creator和子类存在,则很好;否则的话,需要增加一个类层次
c.优点:
(1)Provideshooksforsubclasses。
基类为factorymethod提供缺省实现,子类可以重写新的实现,也可以继承父类的实现。
体现了:
加一层间接性,增加了灵活性
(2)Connectsparallelclasshierarchies
8.Connectsparallelclasshierarchies
9.Implementation
a.父类是否提供缺省的实现
b.factorymethod的参数
c.Language-specificvariantsandissues
(1)SmallTalk,使用类型
(2)C++,使用lazyinitialization技术
d.Usingtemplatestoavoidsubclassing
10.RelatedPatterns
a.Abstractfactory
b.Prototype
11.Examples
AbstractFactory
Prototype
1.Intent
a.Specifythekindsofobjectstocreateusingaprototypicalinstance,andcreatenewobjectsbycopyingthisprototype.
2.Motivation
a.以一个已有的对象作为原型,通过它来创建新的对象。
在增加新的对象的时候,新对象的细节创建工作由自己来负责,从而使新对象的创建过程与框架隔离开来
3.Applicability
a.当产品的创建过程要独立于系统时
b.当产品的类型是在runtime时被指定的情况下
c.避免创建一个与product层次平行的factory层次时
d.当产品类的实例只能是集中确定的不同势力状态中的一种时
4.Structure
5.Participants
a.Prototype、ConcretePrototype、Client
6.Evaluation
a.Addingandremovingproductsatrun-time
b.Specifyingnewobjectsbyvaryingvalues,降低系统中类的数目
c.Configuringanapplicationwithclassesdynamically
d.要求:
每一个product类都必须实现Clone操作
e.对于C++语言特别有意义:
C++的class不是first-classobjects
7.Implementation
a.Usingaprototypemanager
b.ImplementingtheCloneoperation
i.shallowcopyversusdeepcopy
ii.Save&Load
c.Initializingclones
i.两阶段构造
8.Relatedpatterns
a.Prototype与AbstractFactory往往是相互竞争的
b.factorymethod
9.Examples
a.DrawCli,musiceditor
Singleton
1.Intent
a.Ensureaclassonlyhasoneinstance,andprovideaglobalpointofaccesstoit.
2.Motivation
a.It'simportantforsomeclassestohaveexactlyoneinstance.
b.Instance-controlledclass
3.Applicability,UsetheSingletonpatternwhen
a.theremustbeexactlyoneinstanceofaclass,anditmustbeaccessibletoclientsfromawell-knownaccesspoint.
b.whenthesoleinstanceshouldbeextensiblebysubclassing,andclientsshouldbeabletouseanextendedinstancewithoutmodifyingtheircode.
4.Structure
5.Participants
a.Singleton
6.Collaborations
a.ClientsaccessaSingletoninstancesolelythroughSingleton'sInstanceoperation.
7.Evaluation
a.Controlledaccesstosoleinstance
b.Reducednamespace避免使用全局变量(whynot全局静态对象)
c.Permitsrefinementofoperationsandrepresentation,允许子类化
d.Permitsavariablenumberofinstances(How?
)
e.Moreflexiblethanclassoperations(staticmemberfunctionsinC++)
f.这种思想比较适用于Object-Based中的许多情形
8.Implementation
a.Ensuringauniqueinstance
i.考虑使用lazyinitialize
ii.使用global/staticobject的缺点
b.SubclassingtheSingletonclass
9.Relatedpatterns
a.Singleton与其他创建型模式并不矛盾,可以用singleton来实现其他模式中的对象。
包括AbstractFactory、Builder、Prototype等。
多个实例对于构造过程往往并无意义,所以在许多情况下singleton模式比较符合应用背景
10.Examples
a.MFC中的CWinApp派生类实例theApp
b.……
结构型设计模式
Adapter
1.别名:
Wrapper
2.目的(Intent):
Converttheinterfaceofaclassintoanotherinterfaceclientsexpect.Adapterletsclassesworktogetherthatcouldn'totherwisebecauseofincompatibleinterfaces.将一个类的接口转换为客户所需的样子。
Adapter能让接口不兼容的类协同工作。
3.动机(Motivation):
Sometimesatoolkitclassthat'sdesignedforreuseisn'treusableonlybecauseitsinterfacedoesn'tmatchthedomain-specificinterfacethatanapplicationrequires.有时,一个本来设计的时候是为了重复使用的工具类,会因为接口不符合某些应用程序所要求的具体领域接口,而没办法重用。
4.适用范围(Applicability):
UsetheAdapterpatt在以下情况用:
a.要使用已存在的类,但是它的接口不符合需要
b.想创建一个可重用的类,并且它能与无关的、创建的时候没有遇见的类
c.要使用几个已存在的子类,但为了统一接口去继承把这些子类全部都继承一遍又不现实。
这时,我们可以为这些子类的共同父类创建一个Adapter。
5.结构(Struct):
a.类Adapter:
b.对象Adapter:
6.参与者(Participants):
Client,Target,Adaptee,Adapter
7.贡献者(Collaborations):
a.类Adapter——代理
b.对象Adapter——容器
8.评价(Evaluation):
a.本质上是两种重用模型:
i.类Adapter——无法适配adaptee的子类,但是可以重载adaptee的行为
ii.对象Adapter——可以适配adaptee的所有子类
b.用双向Adapter来提供透明性
c.针对类Adapter,用多重继承来实现
9.实现(Implementation):
a.使用C++继承机制实现类Adapter
b.使用内嵌对象技术实现对象Adapter
c.对于Pluggableadapters有三种实现方案:
i.使用抽象方法定义
ii.使用代理对象
iii.参数化技术
d.以上三种方法的实质:
如何在一个类中定义抽象操作,供客户插入?
Hook技术
10.相关模式(RelatedPatterns):
Bridge,Decorator,Proxy
11.例子:
Composite
在绘图编辑器和图形捕捉系统这样的图形应用程序中,用户可以使用简单的图元来创建复杂的图标。
用户可以组合多个简单图元以形成一些较大的图表。
一个简单的实现方法是为Text和Line这样的图元定义一些类,另外定义一些类作为这些图元的容器类。
但是这样的问题是:
使用这些类的代码必须区别对待图元对象和容器对象,而实际上大多数情况下用户认为他们一样。
1.目的:
将对象组合成树结构,来表示他们的部分-整体关系。
Composite可以使客户类统一对待个体对象和对象的组合。
2.动机:
一些部件对象经过组合构成的符合部件对象仍然具有单个部件对象的接口,这样的符合部件对象被称为容器。
符合部件与单个部件具有同样的接口,所有接口包含两个部分:
单个部件的功能、管理子部件的功能。
递归组合如下:
3.结构:
4.参与者:
Client,Component,Leaf,Composite
5.适用范围:
a.想要表示对象的部分-整体层次结构
b.希望用户类忽略个体对象和组合对象的区别,希望用户类统一对待Composite中的各个组成部分时。
6.评价:
定义了包含leaf对象和composite对象的类层次接口(递归结构),简化了客户类,抑郁增加新组件,让你的设计能够尽可能泛化。
然而,容易增加新组建这个特性也带来了难题,那就是很难限制组合中的组件,因为有时希望一个组合只能有某些特定的组件。
使用composite时,不能依赖类型系统来施加这些约束,而必须在运行时检查。
7.实现:
a.显式的父引用:
保持从子部件到父部件的引用,能简化组合结构的遍历和管理。
父部件引用可以简化结构的上移和组件的删除。
通常在Component类中定义父部件引用。
Leaf和composite类可以继承这个引用以及管理这个引用的操作。
b.最大化组件接口:
Composite模式的目的之一是是的用户不知道他们正在使用的具体的Leaf和Composite类。
为了达到这一目的,Composite类应该为Leaf和Composite类尽可能多提供一些公共操作。
Composite类通常为这些操作提供缺省的实现,而Leaf和Composite子类可以对他们进行重定义。
c.声明子部件的管理操作:
行为型模式
Command
1.Aliases
a.Action,Transaction
b.functor(functionobject)
2.Intent
a.Encapsulatearequestasanobject,therebylettingyouparameterizeclientswithdifferentrequests,queueorlogrequests,andsupportundoableoperations.
3.Motivation
a.把请求信息和请求执行过程封装起来
b.framework往往需要把命令请求与处理请求的对象分开,command模式可以把调用操作的对象与操作的目标对象分开
c.允许通过多种途径调用同一个请求。
——请求的重用
4.Applicability:
UsetheCommandpatternwhen:
a.parameterizeobjectsbyanactiontoperform,代替回调
b.specify,queue,andexecuterequestsatdifferenttimes
c.supportundo
d.supportloggingchangessothattheycanbereappliedincaseofasystemcrash
e.structureasystemaroundhigh-leveloperationsbuiltonprimitivesoperations——transactions
5.结构:
6.参与者:
Client,Command、ConcreteCommand、Invoker、Receiver
7.Collaborations:
8.评价:
a.Commanddecouplestheobjectthatinvokestheoperationfromtheonethatknowshowtoperformit.
b.Commandsarefirst-classobjects.Theycanbemanipulatedandextendedlikeanyotherobject.
c.Youcanassemblecommandsintoacompositecommand.AnexampleisMacroCommand.
d.It'seasytoaddnewCommands,becauseyoudon'thavetochangeexistingclasses.
9.实现:
a.Howintelligentshouldacommandbe?
b.Supportingundoandredo
c.Avoidingerroraccumulationintheundoprocess
d.UsingC++templates
10.RelatedPatterns
a.Composite模式可用来实现command组合
b.为实现undo/redo,可以用其他行为模式来管理状态,如memento模式。
Command被放到historylist之前,可以用prototype模式复制自身
11.例子:
Iterator
1.Aliases:
Cursor
2.Intent
a.Provideawaytoaccesstheelementsofanaggregateobjectsequentiallywithoutexposingitsunderlyingrepresentation.
3.Motivation
a.Anaggregateobjectsuchasalistshouldgiveyouawaytoaccessitselementswithoutexposingitsinternalstructure.
b.SeparatingthetraversalmechanismfromtheListobjectletsusdefineiteratorsfordifferenttraversalpolicieswithoutenumeratingthemintheListinterface.
4.Applicability:
UsetheIteratorpatternwhen:
a.toaccessanaggregateobject'scontentswithoutexposingitsinternalrepresentation.
b.tosupportmultipletraversalsofaggregateobjects.
c.toprovideauniforminterfacefortraversingdifferentaggregatestructures(thatis,tosupportpolymorphiciteration).
5.Struct
6.Participants
a.Iterator、ConcreteIterator、Aggregate、ConcreteAggregate
7.Collaborations
8.Evaluation
a.Itsupportsvariationsinthetraversalofanaggregate
b.IteratorssimplifytheAggregateinterface
c.Morethanonetraversalcanbependingonanaggregate
9.Implementation
a.实现可以非常灵活
b.Whocontrolstheiteration?
i.externaliteratorversusinternaliterator
c.Whodefinesthetraversalalgorithm?
i.Aggregate本身定义算法——Cursormode
ii.iterator定义算法——iterator如何访问数据
d.Howrobustistheiterator?
e.AdditionalIteratoroperations.
f.基本操作:
First,Next,IsDone,andCurrentItem
g.Usingpolymorphiciterators——iterator资源释放
h.Iteratorsmayhaveprivilegedaccess
i.Iteratorsforcomposites——适合于internaliterator或者cursor方式的iterator
j.Nulliterators
10.RelatedPatterns
a.Composite:
iterator常被用于composite模式的复合结构
b.PolymorphiciteratorsrelyonfactorymethodstoinstantiatetheappropriateIteratorsubclass.
11.Examples
a.COMenumerator:
connectableobject、…
b.ADO/OLEDB
c.C++STL
d.在STL中,iterator是连接algorithm和container的桥梁
Observer
1.Aliases:
Dependents,Publish-Subscribe
2.Intent
a.Defineaone-to-manydependencybetweenobjectssothatwhenoneobjectchangesstate,allitsdependentsarenotifiedandupdatedautomatically.
3.Motivation
a.把系统分成一些相互关联的类或者对象,如何维护这些类的实例一致性?
b.Thekeyobjectsinthispatternaresubjectandobserver
i.One-to-manyrelationship
ii.Asubjectmayhaveanynumberofdependentobservers.
iii.Allobserversarenotifiedwheneverthesubjectundergoesachangeinstate.
4.Applicability:
UsetheObserverpatternwhen:
a.Whenanabstractionhastwoaspects,onedependentontheother.Encapsulatingtheseaspectsinseparateobjectsletsyouvaryandre
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 设计 模式 复习资料