仿真软件技术 课件 第5章- 仿真软件常用设计模式:结构与行为型模式-20240223-final_第1页
仿真软件技术 课件 第5章- 仿真软件常用设计模式:结构与行为型模式-20240223-final_第2页
仿真软件技术 课件 第5章- 仿真软件常用设计模式:结构与行为型模式-20240223-final_第3页
仿真软件技术 课件 第5章- 仿真软件常用设计模式:结构与行为型模式-20240223-final_第4页
仿真软件技术 课件 第5章- 仿真软件常用设计模式:结构与行为型模式-20240223-final_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

课前回顾软件设计模式ErichGamma,RichardHelm,RalphJohnson

&JohnVlissides(Addison-Wesley,1995)DesignPatterns23种不同的设计模式解决方案已在软件工程领域得到广泛应用课前回顾创建模式CreationalPatterns关注点:怎样创建对象特点:将对象的创建与使用分离,降低软件系统的耦合度,使用者不用关注对象的创建细节。仿真软件常用:单例模式(Singleton)工厂方法(FactoryMethod)生成器(Builder)课前思考学习经验问题:如何解耦对象的接口与实现?如何处理对象之间的动态交互?仿真软件技术第5章仿真软件常用设计模式SimulationSoftwareTechnology第5章仿真软件常用设计模式5.1软件设计模式概述5.2仿真软件常用设计模式创建模式CreationalPatterns结构模式StructuralPatterns行为模式BehavioralPatterns本讲内容第5章仿真软件常用设计模式①能正确使用组合、适配器等结构型模式②能使用命令、模板方法等行为型模式

②本讲目标第5章仿真软件常用设计模式5.1软件设计模式概述5.2仿真软件常用设计模式创建模式CreationalPatterns结构模式StructuralPatterns行为模式BehavioralPatterns本讲内容第5章仿真软件常用设计模式

5.2.2结构型模式StructuralPatterns描述如何将类或者对象结合在一起形成更大的结构以适应更高层次需求。关注类和对象的组合,继承的概念被用来组合接口和定义组合对象获得新功能,通过组合类或者对象产生更大结构。仿真软件常用模式:组合模式(Composite)适配器模式(Adapter)组合模式Composite意图将对象组合成树形结构以表示“部分-整体”的层次结构用户可以无差异地对待单个对象或对象组合使用场景如果想表示对象的部分-整体层次结构希望忽略单个对象和组合对象的差异例子DEVS:原子组件、耦合组件组合模式Composite

解决方案请换一种视角画出组合模式结构图?ClientComponentOperation()Add(Component)Remove(Component)GetChild(int)LeafOperation()CompositeOperation()Add(Component)Remove(Component)GetChild(int)forallginchildreng.Operation();childrenaCompositeaLeafaLeafaCompositeaLeafaLeafaLeafaLeaf组合模式Composite效果应用调用简单能够比较容易地加入新的组件可能导致设计过于通用某些操作并不是对每个类都有意义有些组合可能需要包含特定的组件ClientComponentOperation()Add(Component)Remove(Component)GetChild(int)LeafOperation()CompositeOperation()Add(Component)Remove(Component)GetChild(int)forallginchildreng.Operation();children适配器模式Adaptor意图将一个类的接口装换成客户所需要的而另一个接口作为两个不兼容接口之间的桥梁使用场景某段代码要移植到新的环境,但是新环境的接口要求是现环境不能满足的。例子美国电压110V,中国220V在LINUX上运行WINDOWS程序适配器模式Adaptor

解决方案ClientTarget+Request():voidAdapter+Request():voidAdaptee+SpecificRequest():voidadaptee->SpecificRequest()适配器模式Adaptor

效果通过适配器,客户端可以调用同一接口,实现不同的功能,因而,对客户端来说是透明的。复用了现存的类,解决了现类和复用环境要求不一致的问题将目标类和适配器解耦,通过引入一个适配器类重用现有的适配者类,而无需修改原有代码。关于适配器模式,说法错误的是()适配器继承或依赖已有的对象,实现想要的目标接口主要解决在软件系统中,常常要将一些"现存的对象"放到新的环境中,而新环境要求的接口是现对象不能满足的定义了算法家族,分别封装起来,让他们之间可以相互替换。将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。ABCD提交单选题1分第5章仿真软件常用设计模式5.1软件设计模式概述5.2仿真软件常用设计模式创建模式CreationalPatterns结构模式StructuralPattern行为模式BehavioralPatterns

本讲内容第5章仿真软件常用设计模式

5.2.3行为模式BehavioralPatterns在不同的对象之间划分责任和算法的抽象化。划分类和对象的职责,并研究系统在运行时实例对象之间的交互。仿真软件常用模式:命令模式(Command)观察者模式(Observer)模板方法(TemplateMethod)观察者模式Observer观察者模式(Observer)侦查到舰艇,发射导弹攻击发现导弹来袭,发射拦截弹进行拦截无人机编队舰艇观察者模式Observer意图定义对象之间一对多关系:当一个对象的状态发生变化时,所有依赖于它的对象会收到通知并进行自动更新。使用场景观察者模式Observer

解决方案Subject-observers:vector<Observer>-Attach(Observer):void-Detach(Observer):void+Notify():voidforalloinobservers{o->Update();}ConcreteSubject-subjectState+GetState():void+SetState():void+Notify():voidObserver+Update():voidConcreteObserver-observerState+Update():voidreturnsubjectStateobserverState=subject->GetState()Notify()Update()GetState()Update()GetState()aConcreteSubjectaConcreteObserveranotherConcreteObserverSetState()观察者模式Observer效果观察者和被观察者是松耦合的建立了一套触发机制(消息机制)效率问题如果一个被观察者有很多观察者的话,通知所有的观察者开销很大。循环依赖,会导致崩溃观察者模式适用于当一个抽象模型存在两个方面,其中一方面依赖于另一方面,将这二者封装在独立的对象中以使它们可以各自独立地改变和复用。当对一个对象的改变需要同时改变其它对象,而不知道具体有多少对象有待改变时。当一个对象必须通知其它对象,而它又不能假定其它对象是谁。一个对象结构包含多类对象,它们有不同的接口,而想对这些对象实施一些依赖于其具体类的操作ABCD提交多选题3分命令模式Command意图将一次请求封装为一个对象。因此,可以通过参数化的对象来实现不同的请求。使用场景需要程序模拟时间的演化需要对行为进行记录、撤销或重做例子仿真对象之间发消息,用事件队列管理消息命令模式CommandClientInvokerReceiver+Action()要求该命令执行这个请求知道如何实施与执行一个请求相关的操作,任何类型都可能作为一个接收者-receiver:ReceiverConcreteCommand+Execute()<<interface>>Command+Execute()将一个接收者对象绑定于一个动作,调用接收者相应的操作,以实现Execute用来声明执行操作的接口命令模式(Command),将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作命令模式Command

解决方案ClientCommandExecute()ReceiverAction()ConcreteCommandExecute()receiver->Action();stateInvokerreceiveranInvokeraReceiveraClientaCommandnewCommand(aReceiver)StoreCommand(aCommand)Execute()Action()命令模式Command效果类间解耦:调用者与接收者之间没有任何依赖关系,调用者实现功能时只需调用Command抽象类的execute方法,不需要了解到底是哪个接收者执行可扩展性:新的命令可以很容易地添加到系统中Command是抽象基类,新的命令类可以派生execute(),undo()andredo()可作为虚函数可能导致有过多的命令类模板方法TemplateMethod意图定义了算法的骨架,将具体实现推迟到子类中。不改变算法结构,重定义算法的某些特定步骤。使用场景由算法来实现一个不变的行为,让子类实现可改变的行为将子类中的公用行为抽取出来例子标准库中的排序算法模板方法TemplateMethod

解决方案抽象类AbstractClass+TemplateMethod():void+SpecificMethod():void+abstractMethod1():void+abstractMethod2():void客户类TemplateMethodPattern-tm:AbstractClass+Tmain(String[]args):voidtm=newConcreteClass();tm.TemplateMethod();具体子类ConcreteClass+abstractMethod1():void+abstractMethod2():voidpublicvoidTemplateMethod()//模板方法{SpecificMethod();abstractMethod1();abstractMethod2();}模板方法TemplateMethod效果封装不变部分,扩展可变部分不变部分封装到父类,可变部分通过继承来扩展。行为由父类控制,子类实现基本方法是由子类实现的,因此子类可以通过扩展的方式增加相应的功能,符合开-闭原则。不同的实现都需要定义一个子类,系统更加庞大。反向的控制结构,它降低了代码的可阅读性。如果父类添加新的抽象方法,所有子类都需修改。课程小结仿真软件常用设计模式创建模式CreationalPatterns结构模式StructuralPatterns

组合方法

适配器行为模式BehavioralPatterns

观察者模式

命令模式模板方法课后习

温馨提示

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

评论

0/150

提交评论