面向对象方法与技术课件:设计模式实践_第1页
面向对象方法与技术课件:设计模式实践_第2页
面向对象方法与技术课件:设计模式实践_第3页
面向对象方法与技术课件:设计模式实践_第4页
面向对象方法与技术课件:设计模式实践_第5页
已阅读5页,还剩71页未读 继续免费阅读

下载本文档

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

文档简介

面向对象的技术与方法共69页第2页Proxy模式目的为其他对象提供一种代理以控制对这个对象的访问。说白了就是,在一些情况下客户不想或者不能直接引用一个对象,而代理对象可以在客户和目标对象之间起到中介作用,去掉客户不能看到的内容和服务或者增添客户需要的额外服务。共69页第3页Proxy模式问题:对于每一个开销很大的对象,应该根据需要进行创建,当一个图像变为可见时会产生这样的需要。但是在文档中我们用什么来代替这个图像呢?我们又如何才能隐藏根据需要创建图像这一事实,从而不会使得编辑器的实现复杂化呢?共69页第4页Proxy模式问题的解决方案是使用另一个对象,即图像Proxy,替代那个真正的图像。Proxy可以代替一个图像对象,并且在需要时负责实例化这个图像对象。共69页第5页Proxy模式结构图共69页第6页Proxy模式分类:1)远程代理(RemoteProxy)为一个对象在不同的地址空间提供局部代表。2)虚代理(VirtualProxy)根据需要将一个资源消耗很大或者比较复杂的对象延迟的真正需要时才创建。3)保护代理(ProtectionProxy)控制对原始对象的访问。共69页第7页Proxy模式4)智能引用(SmartReference)代理,当一个对象被引用时,提供一些额外的操作,比如将对此对象调用的次数记录下来等。共69页第8页Proxy模式结构共69页第9页Proxy模式运行时刻一种可能的代理结构的对象图。共69页第10页Proxy模式举例:简单的论坛的权限管理—发贴功能声明了真实对象和代理对象的共同接口:classMyForum{

public:virtualvoidAddFile()=0;

}

共69页第11页Proxy模式代理对象类:classMyForumProxy:publicMyForum{

private:RealMyForum*forum;

intpermission;//权限值

public:MyForumProxy(intpermission)

{

forum=newRealMyForum()

this->permission=permission;

}

共69页第12页Proxy模式

voidAddFile()//实现的接口

{

//满足权限设置的时候才能够执行操作

if(“registered”==permission)

{

forum->AddFile();

}

else

cout<<"YouarenotalegaluserofMyForum,pleaseregister!";

}

};共69页第13页Proxy模式实体对象类:classMyForumProxy:publicMyForum{

voidAddFile()//实现的接口

{

//实现发贴功能

}

};共69页第14页Proxy模式说明:为其他对象提供一种代理以控制对这个对象的访问。也就是说当我们不能直接访问我们想访问的对象时,必须通过一个代理对象来访问。共69页第15页Proxy模式proxy模式与adapter模式关系:都是为一个对象提供一种前置的接口。但是,变压器模式的用意是要改变所考虑的对象的接口;而代理模式并不能改变所代理的对象的接口,在这一点上两个模式有明显的区别。共69页第16页Mediator模式问题:

面向对象设计鼓励将行为分布到各个对象中。这种分布可能会导致对象间有许多连接。在最坏的情况下,每一个对象都知道其他所有对象。共69页第17页Mediator模式目的:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。共69页第18页Mediator模式可以通过将集体行为封装在一个单独的中介者(mediator)对象中以避免这个问题。中介者负责控制和协调一组对象间的交互。中介者充当一个中介以使组中的对象不再相互显式引用。这些对象仅知道中介者,从而减少了相互连接的数目。共69页第19页Mediator模式例如,一个图形用户界面中对话框的实现共69页第20页Mediator模式FontDialogDirector可作为一个对话框中的窗口组件间的中介者。共69页第21页Mediator模式交互图说明了各对象如何协作处理一个列表框中选项的变化。共69页第22页Mediator模式FontDialogDirector抽象怎样被集成到一个类库中,如下图所示:共69页第23页Mediator模式结构共69页第24页Mediator模式一个典型的对象结构可能如下图所示:共69页第25页代码示例抽象类DialogDirector为导控者定义了一个接口。共69页第26页Widget是窗口组件的抽象基类。一个窗口组件知道它的导控者。共69页第27页Changed调用导控者的WidgetChanged操作。通知导控者某个重要事件发生了。共69页第28页ListBox、EntryField和Button是Widget的子类,用作特定的用户界面构成元素。ListBox提供了一个GetSelection操作来得到当前的选择项,而EntryField的SetText操作则将新的正文放入该域中。共69页第29页共69页第30页Button是一个简单的窗口组件,它一旦被按下就调用Changed。这是在其HandleMouse的实现中完成的:共69页第31页FontDialogDirectator类在对话框中的窗口组件间进行中介。FontDialogDirectator是

DialogDirectator的子类:共69页第32页FontDialogDirectator跟踪它显示的窗口组件。它重定义CreateWidgets以创建窗口组件并初始化对它们的引用:共69页第33页WidgetChanged保证窗口组件正确地协同工作:共69页第34页Mediator模式效果1)它将各Colleague解耦2)它简化了对象协议3)它对对象如何协作进行了抽象4)它使控制集中化,集中的优点就是便于管理,也正是符合了OO设计中的每个类的职责要单一和集中的原则。共69页第35页Mediator模式总结说明:定义:用一个中介对象来封装一系列的对象交互特点:中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互好处:降低复杂度.所有对象都只和Mediator中介者单线联系.而中介者隐式的包含了对象之间的关系使原本多对多的关系变成1对多关系共69页第36页Mediator模式总结用途:主要用于简化以下类型的系统:

1、有多个对象

2、多个对象之间有着复杂的联系

Mediator模式在事件驱动类应用中比较多,例如界面设计GUI.;聊天,消息传递等,在聊天应用中,需要有一个MessageMediator,专门负责request/response之间任务的调节.共69页第37页Observe模式示例:共69页第38页Observe模式目的:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。共69页第39页Observe模式Observer的一个实例:

Model/View/Control(MVC)

实现了业务逻辑和表示层的解耦MFC中,Doc/View(文档视图结构)提供了实现MVC的框架结构在Java阵容中,Struts则提供了实现MVC的框架结构共69页第40页Observe模式结构:共69页第41页Observe模式交互图共69页第42页Observe模式示例:实现时间的两种显示一个抽象类定义了Observer接口:共69页第43页Observe模式一个抽象类定义了Subject接口:共69页第44页Observe模式共69页第45页Observe模式ClockTimer提供了一个接口用于取出单个的时间单位如小时,分钟,和秒。共69页第46页Observe模式Tick操作由一个内部计时器以固定的时间间隔调用,从而提供一个精确的时间基准。Tick更新ClockTimer的内部状态并调用Notify通知观察者:共69页第47页Observe模式现在我们可以定义一个DigitalClock类来显示时间。它从一个用户界面工具箱提供的Widget类继承了它的图形功能。通过继承Observer,Observer接口被融入DigitalClock的接口。共69页第48页Observe模式共69页第49页Observe模式共69页第50页Observe模式共69页第51页Observe模式共69页第52页Observe模式一个AnalogClock可用相同的方法定义共69页第53页Observe模式测试代码:共69页第54页Observe模式

在Java语言中还提供了专门的接口实现Observer模式:通过专门的类Observable及Observer接口来实现MVC编程模式,其UML图可以表示为:共69页第55页Observe模式共69页第56页Strategy模式目的定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。给业务逻辑(算法)具体实现和抽象接口之间的解耦。共69页第57页适用性许多相关的类仅仅是行为有异。需要使用一个算法的不同变体。算法使用客户不应该知道的数据。一个类定义了多种行为,并且这些行为在这个类的操作中以多个条件语句的形式出现。Strategy模式共69页第58页结构Strategy模式共69页第59页Strategy模式示例:实现从键盘读入字符并输出打印的程序。CopyReadKeyboardWritePrinter共69页第60页Strategy模式Copy程序voidCopy(){intc;while((c=RdKbd()!=EOF))WrtPrt(c);}共69页第61页Strategy模式需求在变化

希望Copy程序能从纸带读入机中读入信息。该如何响应此变化?给Copy函数添加boolean参数变量?若是,则会带来大量其他调用Copy函数的地方的改变。共69页第62页Strategy模式保持接口不变,修改结果:BoolptFlag=false;//remembertoresetthisflagvoidCopy(){intc;while((c=(ptFlag?Rdpt():RdKbd()))!=EOF))WrtPrt(c);}共69页第63页Strategy模式得寸进尺希望Copy程序可以输出到纸带穿孔机上。

又该怎么办呢?共69页第64页Strategy模式boolptFlag=false;//remembertoresetthisflagboolpunchFlag=false;//remembertoresetthisflagvoidCopy(){intc;while((c=(ptFlag?Rdpt():RdKbd()))!=EOF))punchFlag?WrtPunch(c):WrtPrt(c);}共69页第65页Strategy模式如果再有新的需求变化又该如何???采用Strategy模式对问题进行重新设计共69页第66页Strategy模式classReader{ public:virtualintread()=0;};classKeyboardReader:publicReader{ public:virtua

温馨提示

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

评论

0/150

提交评论