资源预览内容
第1页 / 共41页
第2页 / 共41页
第3页 / 共41页
第4页 / 共41页
第5页 / 共41页
第6页 / 共41页
第7页 / 共41页
第8页 / 共41页
第9页 / 共41页
第10页 / 共41页
亲,该文档总共41页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
设计模式厉小军 浙江工商大学信息学院 *第四章 行为为型设计设计模式行为型模式(Behavioral Pattern)描述类或对象之间如何交互以及如何分配职责。1.责任链模式(Chain of Responsibility)1.1 定义:避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求, 将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为 止。 向链中的对象提 出最初的请求。具体传递者。 l处理它所负责的请求。 l可以访问链中下一个对象。 l如果可以处理请求,就处理 它,否则将请求转发给后继者 。传递者接口。1.责任链模式(Chain of Responsibility)1.2 实例:军情的传递 军队中军情的传递就是一个责任链,下属行动需要上级批准,所以要把行动计划报给上级,上级又传给上级,直至有人可以决定。1.责责任链链模式(Chain of Responsibility)1.3 实例:采购分级审批 一般企业的采购审批都是分级的,采购量的不同就需要不同层次的主管人员来审批。1.责责任链链模式(Chain of Responsibility)1.4 实例:智能大厦安全系统 某智能大厦安全监控系统,包括很多各种传感器(运动检测器、温度传感器等),它们的状态会传给计算机。计算机系统的工作是记录这些状态并在紧急事件发生时发出警报。1.责责任链链模式(Chain of Responsibility)1.5 优缺点:责任链模式可以减少对象的连接,为对旬责任分配增加了很大的 灵活性。该模式允许把一组类当作一个类来使用,并且在类的组 合中,一个类的事件可以发送到另一个类来处理。 责任链还会以树状出现,这样一个事件可以传给多个类,或者多 个类的信息提交给一个类。 树状责任链能够提供更灵活的技巧,但缺点是信息在树中容易迷 失。1.责责任链链模式(Chain of Responsibility)1.6 适用性:超过一个对象能够处理客户请求并且到底哪个对象处理预先不知 道。 一个请求可以分布到多个对象但它的接收都不是清晰。 可以动态指定一组对象处理对象请求。1.责责任链链模式(Chain of Responsibility)2.命令模式 (Command Pattern)2.1 定义将一个请求封装成一个对象,因此可以参数化多个客户的不同请求,将请求排队,记录请求日志,并且支持撤消操作。 具体类 l将一个接收者对象绑定 于一个动作 l实现Execute方法,以调 用接收者的相关的操作。接收者 知道如何执行关联请 求的相关操作调用者 要求一个命令对象执 行一个请求2.命令模式 (Command Pattern)2.1 定义 2.命令模式 (Command Pattern)2.2 例子:餐馆点菜餐馆顾客点菜,顾客只需要向服务员下订单点菜,不需要知道哪个厨师做这个菜,顾客所要做的只是订单交给服务员就可以了。发送请求的对象只需要知道如何发送请求,而不知道如何完成请求。2.命令模式 (Command Pattern)2.2 例子:简单计算器把命令模式应用于一个简单计算器程序,可以产生无限个Redo(重做)和Undo(取消)操作。2.命令模式 (Command Pattern)2.2 例子:总开关2.3 优缺点:命令模式分离了接受请求的对象与实现处理请求工作的对象,已 经存在的对象可以保持不变,使得增加新类的工作更简单。 命令模式还可以分离用户界面和业务对象,降低系统耦合度。 最大缺陷是类的数量增加了,系统变得更复杂,程序的调试工作 也相应变得困难。2.命令模式 (Command Pattern)2.4 适用性:当需要与动作有关的对象来作为参数。 需要在不同的时间创建请求,生成请求队列,执行请求。 需要支持取消、保存修改日志或处理事务功能。需要支持宏命令。2.命令模式 (Command Pattern)3.迭代模式 (Iterator Pattern)3.1 定义提供一种方法顺序访问一个聚合对象中的各个元素,而不用暴露这个对象的内部 表示。 具体迭代器 l实现迭代器的接口 l在遍历时跟踪当前聚 合对象中的位置。聚合迭代器 定义访问和遍历元素 的接口具体聚合3.迭代模式 (Iterator Pattern)3.2 餐厅菜单(有两份不同的菜单)3.3 优缺点:命令模式分离了接受请求的对象与实现处理请求工作的对象,已 经存在的对象可以保持不变,使得增加新类的工作更简单。 命令模式还可以分离用户界面和业务对象,降低系统耦合度。 最大缺陷是类的数量增加了,系统变得更复杂,程序的调试工作 也相应变得困难。3.迭代模式 (Iterator Pattern)3.4 适用性:访问一个聚合对象的内容而无需暴露它的内部表示。 支持对聚合对象的多种遍历。 为遍历不同的聚合结构提供一个统一的接口(即支持多 态迭代)。3.迭代模式 (Iterator Pattern)4.观察者模式 (Observer Pattern)4.1 定义对象间的一种一对多依赖关系,使得每当一个对象改变状态,则其相关依赖对象 皆得到通知并被自动更新。 具体观察者被观察者对象观察者 定义一个更新接口,在 一个被观察对象改变时 应被通知 具体被观察 对象4.观察者模式 (Observer Pattern)4.1 定义 4.观察者模式 (Observer Pattern)4.2 例子:气象站 4.观察者模式 (Observer Pattern)4.3 例子:猫和老鼠 4.观察者模式 (Observer Pattern)4.4 例子:股票变化 4.3 优缺点:观察者模式抽象了被观察者与观察者对象间的连接,提供了广播式的对象间通信,并且容易增加新的观察者对象。 观察者模式的缺陷是对象间的关系难易理解,在某种情况下会表现低效能。 4.观观察者模式 (Observer Pattern)4.4 适用性:对一个对象的变化请求需要其他对象也变化,并且其他要变化 对象的数量不明确。 一个对象需要通知其他对象而不需要掌握其他对象的识别方法 。4.观观察者模式 (Observer Pattern)5.模板方法模式 (Template Method Pattern)5.1 定义定认一个操作中算法的骨架(skeleton),以将一些步骤延缓到子类中实现。 模板方法让子类重新定义一个算法的某些步骤而无须改变算法的结构。抽象类 l定义一个抽象原始的操作,其子类可以重定 义它实现一个算法的各个步骤 l实现一个模板方法定义一个算法的骨架。此 模板方法不仅可以调用原始的操作,还可以调 用定义于AbstractClass中的方法或其他对象中 的方法。具体子类 实现原始的操作以完成 子类特定算法的步骤5.模板方法模式 (Template Method Pattern)5.1 定义定义一个操作中算法的骨架(skeleton),以将一些步骤延缓到子类中实现。 模板方法让子类重新定义一个算法的某些步骤而无须改变算法的结构。5.2 例子:咖啡和茶的冲泡法 咖啡冲泡法 (1) 把水煮沸 (2) 用沸水冲泡咖啡 (3) 把咖啡倒进杯子 (4) 加糖和牛奶咖啡冲茶法 (1) 把水煮沸 (2) 用沸水浸泡茶叶 (3) 把茶倒进杯子 (4) 加柠檬5.模板方法模式 (Template Method Pattern)5.2 例子:咖啡和茶的冲泡法 5.模板方法模式 (Template Method Pattern)5.2 例子:咖啡和茶的冲泡法 咖啡冲泡法 (1) 把水煮沸 (2) 用沸水冲泡咖啡 (3) 把咖啡倒进杯子 (4) 加糖和牛奶咖啡冲茶法 (1) 把水煮沸 (2) 用沸水浸泡茶叶 (3) 把茶倒进杯子 (4) 加柠檬采用相同的算法 (1) 把水煮沸 (2) 用沸水泡咖啡或茶叶 (3) 把饮料倒进杯子 (4) 在饮料中加入适当的调料void prepareRecipe() boilWater();brew();pourInCup();addCondiments(); 5.模板方法模式 (Template Method Pattern)5.2 例子:咖啡和茶的冲泡法 5.模板方法模式 (Template Method Pattern)5.3 例子:数据库连接模板 5.模板方法模式 (Template Method Pattern)5.3 优缺点:模板方法模式在一个类中形式化地定义算法,而由它的子类实现细节的处理。在子类定义处理算法时不会改变算法的结构。 每个不同的实现都需要定义一个子类。 5.模板方法模式 (Template Method Pattern)5.4 适用性:想将相同的算法放在一个类中,将算法变化的部分放在子类中实现。 子类公共的算法应该放在一个公共的类中,避免代码重复。 5.模板方法模式 (Template Method Pattern)6.策略模式 (Strategy Pattern)6.1 定义定义一系列的算法,将每一个算法封装起来,并让它们可以相互替换。策略 模式让算法独立于使用它的客户而变化。6.策略模式 (Strategy Pattern)6.2 例子:去机场的策略6.策略模式 (Strategy Pattern)6.2 例子:排序方法6.3 优缺点:可以避免使用多重条件转移语句,系统变得更加灵活。 会产生很多子类,符合高内聚的责任分配模式。 6.策略模式 (Strategy Pattern)6.4 适用性:多个类的区别只是在于行为不同。 需要对行为的算法作很多变动。客户不知道算法要使用的数据。 6.策略模式 (Strategy Pattern)
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号