软件设计模式之行为模式

上传人:j7****6 文档编号:61692264 上传时间:2018-12-10 格式:PPT 页数:40 大小:2.62MB
返回 下载 相关 举报
软件设计模式之行为模式_第1页
第1页 / 共40页
软件设计模式之行为模式_第2页
第2页 / 共40页
软件设计模式之行为模式_第3页
第3页 / 共40页
软件设计模式之行为模式_第4页
第4页 / 共40页
软件设计模式之行为模式_第5页
第5页 / 共40页
点击查看更多>>
资源描述

《软件设计模式之行为模式》由会员分享,可在线阅读,更多相关《软件设计模式之行为模式(40页珍藏版)》请在金锄头文库上搜索。

1、第四章,行为模式,课程目标,Observer模式 Iterator模式 Strategy模式 Template模式 Visitor模式 Chain of Responsibility模式 Command模式 其他模式,如Interpreter模式、Mediator模式等,体验项目,本章体验项目的主要功能是使用Command模式实现窗体中鼠标画图功能,该程序主要由以下几个部分组成:,程序运行完成后,拖动鼠标在窗体上画出“Hello”字符,(1)命令接口Command,定义命令方法。,(2)具体命令角色MacroCommand和DrawCommand类,这两个类都实现Command接口,DrawC

2、ommand实现画图命令,MacroCommand类定义对命令的新增、执行和删除等方法。,(3)请求接口Drawable,DrawCanvas类实现Drawable接口,定义与具体请求相关的操作。,(4)客户端,继承JFrame并实现ActionListener和MouseMotionListener接口,创建窗体界面和各种事件,行为模式概述,行为模式涉及到算法和对象间职责的分配,行为模式描述了对象和类的模式,以及它们之间的通信模式,这些模式刻划了在程序运行时难以跟踪的复杂的控制流。,可分为行为类模式和行为对象模式两种:,(1)行为类模式使用继承机制在类间分派行为。,(2)行为对象模式使用对象

3、复合而不是继承。一些行为对象模式描述了一组对等的对象怎样相互协作以完成其中任何一个对象都无法单独完成的任务。这里一个重要的问题是对等对象如何互相了解对方。对等对象可以保持显式的对对方的引用,但那会增加它们的耦合度。在极端情况下,每一个对象都要了解所有其他的对象。,Chain of Responsibility模式,Chain of Responsibility模式即职责链模式,在有不止一个对象可以处理或实现客户请求的时候,责任链模式(CoR)会顺序地给每一个对象一次处理请求的机会。一个较好的例子就是Java的异常处理机制,当程序中发生异常时,将会比较与catch所捕捉的异常是否相符合,如果符合

4、就执行所设定的处理,如果都没有对比到适当的异处理,就会将异常丢出try catch程序块之外。,模式介绍,主要适用于以下情况:,有多个对象可以处理一个请求,但哪个对象来处理该请求是在运行时刻自动确定的。,想在不明确指定接收者的情况下,向多个对象中的一个提交一个请求。,希望动态的指定处理某个请求的对象集合。,Chain of Responsibility模式结构图,职责链模式结构图如下:,Handler:定义一个处理请求的接口。,ConcreteHandler:处理它所负责的请求,并可访问在该链中它的后继者。如果可处理该请求,就处理;否则将该请求转发给它的后继者。,Client:向链上的具体处理

5、者即ConcreteHandler对象提交请求。,Chain of Responsibility模式示例,public interface Handler public void handleRequest(char c); public class CharacterHandler implements Handler private Handler successor; public CharacterHandler(Handler successor) this.successor = successor; public void handleRequest(char c) if(Cha

6、racter.isLetter(c) System.out.println(“CharacterHandler类处理请求,返回结果:你输入的是字元“); else successor.handleRequest(c); public class NumberHandler implements Handler private Handler successor; public NumberHandler(Handler successor) this.successor = successor; public void handleRequest(char c) if(Character.is

7、Digit(c) System.out.println(“NumberHandler类处理请求,返回结果:你输入的是数字“); else successor.handleRequest(c); public class SymbolHandler implements Handler public void handleRequest(char c) if (Character.isDefined(c) System.out.println(“SymbolHandler类处理请求,返回结果:你输入的是符号“); else System.out.println(“请求未被处理“); ,处理字元,

8、处理数字,处理符号,职责链模式优势和不足,职责链模式主要有以下几个优点:,降低耦合度,职责链模式不足:,效率低 ,一个请求的完成可能要遍历到最后才可能完成。,扩展性差,在该模式中,一定要有一个统一的Handler接口。,增强了给对象指派职责的灵活性,Command模式,Command模式即命令模式,该模式把一个请求或者操作封装到一个对象中,并将发出命令的责任和执行命令的责任分割开,委派给不同的对象。允许请求的一方和发送的一方独立开来 。,模式介绍,主要适用于以下情况:,抽象出待执行的动作以参数化某对象,你可用过程语言中的回调(callback)函数表达这种参数化机制。,在不同的时刻指定、排列和

9、执行请求。一个Command对象可以有一个与初始请求无关的生存期。,支持取消操作。,支持修改日志。,用构件在原语操作上的高层操作构造一个系统。,Command模式结构图,命令模式结构图如下:,Command:声明执行操作的接口。,ConcreteCommand:将一个接收者对象绑定于一个动作,调用接收者相应的操作,以实现execute()方法。,Receiver:知道如何实施与执行一个请求相关的操作,任何类都可能作为一个接收者。,Invoker:如果该命令可执行,则要求该命令执行这个请求,并存储ConcreteCommand对象。,Client:创建一个具体命令对象并设定它的接收者。,Comm

10、and模式示例,Command模式在界面设计中得到了广泛的应用,比如以下的示例:在窗体中添加四个按钮和一个文本框,其中三个按钮用于改变文本框的颜色,第四个按钮用于关闭窗体。具体实现如下:,interface CommandInterface public void processEvent( ); import javax.swing.JButton; class Blue extends JButton implements CommandInterface public void processEvent( ) Client.tf1.setBackground(Color.BLUE); p

11、ublic Blue(String name) super(name); class buttonHandler implements ActionListener public void actionPerformed(ActionEvent e) CommandInterface CommandObj = (CommandInterface)e.getSource( ); CommandObj.processEvent( ); ,自定义四个按钮类,分别继承JButton并实现CommandInterface接口。,Blue类改变文本框的颜色为“BLUE”, Cyan类改变文本框的颜色为“c

12、yan”, Red类改变文本框的颜色为“red”, ExitButton类实现关闭窗体的操作。都很类似所以只给出了Blue类的参考代码。,Command模式优势和不足,不足: 使用Command模式会导致系统有过多具体的 Command类。某些系统可能需要几十个,几百个甚至几千个具体Command类,这会使Command模式在这样的系统里变得不实际。,Command模式将“进行操作请求”的对象和“知道如何执行操作”的对象分离开来。,多个command可以被组装成一个复合command。,很容易增加新的command,因为不需要修改现有的类。,Command模式具有以下优点:,Command对象

13、可以像任何其它对象一样被使用和继承。,Iterator模式,Iterator模式即迭代器模式,用于遍历集合类的标准访问方法。它可以把访问逻辑从不同类型的集合类中抽象出来,从而避免向客户端暴露集合的内部结构,模式介绍,主要适用于以下情况:,访问一个聚合对象的内容而无需暴露它的内部表示,多个对象聚在一起形成的总体称之为聚合,聚合对象是能够包容一组对象的容器对象。,支持对聚合对象的多种遍历。,为遍历不同的聚合结构提供一个统一的接口(即支持多态迭代)。,Iterator模式结构图,迭代器模式结构图如下:,Iterator:定义访问和遍历元素的接口。,ConcreteIterator:实现了Iterat

14、or接口的具体迭代器,用于对聚合对象遍历时跟踪当前的位置。,Aggregate:定义创建相应迭代器的接口。,ConcreteAggregate:实现了Aggregate接口的聚合对象,实现了返回一个ConcreteIterator实例的方法。,Iterator模式示例,public interface MyIterator public boolean hasNext(); public Object next(); import java.util.List; public class ListIterator implements MyIterator private List list

15、= null; private int index; public ListIterator(List l) index=-1; this.list=l; public boolean hasNext() return indexlist.size()-1; public Object next() +index; return list.get(index); import java.util.List; public interface MyList extends List public MyIterator getIterator( ); public MyIterator getRe

16、verseIterator( ); import java.util.Vector; public class MyVector extends Vector implements MyList public MyIterator getIterator() return new ListIterator(this); public MyIterator getReverseIterator() return new ReverseListIterator(this); ,Iterator模式优势和不足,使用迭代抽象:使得访问一个聚合对象的内容而无需暴露它的内部表示。,提供迭代多态:为遍历不同的集合结构提供一个统一的接口,从而支持同样的算法在不同的集合结构上进行操作。,主要缺点在与迭代器的健壮性问题:遍历的同时更改迭代器所在的

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号