JAVA设计模式之行为型模式.doc
《JAVA设计模式之行为型模式.doc》由会员分享,可在线阅读,更多相关《JAVA设计模式之行为型模式.doc(22页珍藏版)》请在沃文网上搜索。
1、JAVA设计模式之行为型模式结构型模式包括责任链模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模版模式和访问者共11类1、责任链模式使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一链,这条链传递该请求,直到有一个对象处理它为止。这一模式的想法是,给多个对象处理一个请求的机会,从而解耦发送者和接受者。适用条件:1)有多个的对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定。2)你可在不明确指定接收者的情况下,向多个对象中的一个提交一个请求。3)可处理一个请求的对象集合应被动态指定。参与者:1)Hand
2、ler:定义一个处理请求的接口。(可选)实现后继链。2)ConcreteHandler:处理它所负责的请求。可访问它的后继者。如果可处理该请求,就处理它;否则将该请求转发给它的后继者。3)Client:向链上的具体处理者(ConcreteHandler)对象提交请求。示例:package zantip.modules;public class ResponsibilityTest / 测试public static void main(String args) RequestHandle reqHandlehr = new HRRequestHandle();RequestHandle req
3、Handlepm = new PMRequestHanlde(reqHandlehr);RequestHandle reqHandletl = new TLRequestHandle(reqHandlepm);/ team leader处理离职请求Request request = new DimissionRequest();reqHandletl.handleRequest(request);System.out.println(=);/ team leader处理加薪请求request = new AddMoneyRequest();reqHandletl.handleRequest(r
4、equest);System.out.println(=);/ 项目经理处理辞职请求request = new DimissionRequest();reqHandlepm.handleRequest(request);/ requestclass Request class DimissionRequest extends Request class AddMoneyRequest extends Request class LeaveRequest extends Request / Handlerinterface RequestHandle public void handleRequ
5、est(Request request);/ ConcreteHandlerclass HRRequestHandle implements RequestHandle Overridepublic void handleRequest(Request request) if (request instanceof DimissionRequest) System.out.println(要离职,人事审批);System.out.println(请求完成);class PMRequestHanlde implements RequestHandle RequestHandle requesth
6、andle;public PMRequestHanlde(RequestHandle rh) this.requesthandle = rh;Overridepublic void handleRequest(Request request) if (request instanceof AddMoneyRequest) System.out.println(要加薪,项目经理审批); else requesthandle.handleRequest(request);class TLRequestHandle implements RequestHandle RequestHandle req
7、uesthandle;public TLRequestHandle(RequestHandle rh) this.requesthandle = rh;Overridepublic void handleRequest(Request request) if (request instanceof LeaveRequest) System.out.println(要请假,项目组长审批); else requesthandle.handleRequest(request);输出结果:要离职,人事审批请求完成=要加薪,项目经理审批=要离职,人事审批请求完成2、命令模式将一个请求封装为一个对象,从而
8、使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作。适用条件:1)抽象出待执行的动作以参数化某对象。2)在不同的时刻指定、排列和执行请求。3)支持取消操作。4)支持修改日志,这样当系统崩溃时,这*修改可以被重做一遍。5)用构建在原语操作上的高层操作构造一个系统。参与者:1)Command:声明执行操作的接口。2)ConcreteCommand:将一个接收者对象绑定于一个动作。调用接收者相应的操作,以实现Execute。3)Client:创建一个具体命令对象并设定它的接收者。4)Invoker:要求该命令执行这个请求。5)Receiver:知道如何实现与执行一个请
9、求相关的操作。任何类都可能作为一个接收者。示例:package zantip.modules;public class CommandTest / 测试public static void main(String args) Receiver recv = new Receiver();Command cmd = new CommandImpl(recv);Invoker invok = new Invoker();invok.setCommand(cmd);invok.execute();/ Receiverclass Receiver public Receiver() System.ou
10、t.println(这是接收请求类);/ Commandabstract class Command protected Receiver receiver;public Command(Receiver receiver) this.receiver = receiver;public abstract void execute();/ ConcreteCommandclass CommandImpl extends Command public CommandImpl(Receiver receiver) super(receiver);Overridepublic void execut
11、e() System.out.println(执行命令);/ Invokerclass Invoker private Command command;public Command getCommand() return command;public void setCommand(Command command) mand = command;public void execute() System.out.println(Invoker的execute被调用,转向成员变量的execute);mand.execute();输出结果:这是接收请求类Invoker的execute被调用,转向成员
12、变量的execute执行命令3、解释器模式给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。适用条件:当有一个语言需要解释执行,并且你可将该语言中的句子表示为一个抽象语法树时,可使用解释器模式。而当存在以下情况时该模式效果最好:1)该文法简单对于复杂的文法,文法的*层次变得庞大而无法管理。2)效率不是一个关键问题最高效的解释器通常不是通过直接解释语法分析树实现的,而是首先将它们转换成另一种形式。参与者:1)AbstractExpression(抽象表达式):声明一个抽象的解释操作,这个接口为抽象语法树中所有的节点所共享。2)TerminalExpr
13、ession(终结符表达式):实现与文法中的终结符相关联的解释操作。一个句子中的每个终结符需要该类的一个实例。3)NonterminalExpression(非终结符表达式):为文法中的非终结符实现解释(Interpret)操作。4)Context(上下文):包含解释器之外的一些全局信息。5)Client(客户):构建(或被给定)表示该文法定义的语言中某个特定的句子的抽象方法树。该抽象语法树由NonterminalExpression和TerminalExpression的实例装配而成。调用解释器操作。示例:package zantip.modules;import java.util.Arr
14、ayList;import java.util.List;/AbstractExpressionabstract class Expression abstract void interpret(Context context);/ Contextclass Context private String content;private List list = new ArrayList();public String getContent() return content;public void setContent(String content) this.content = content
15、;public List getList() return list;public void setList(List list) this.list = list;public void add(Expression ex) list.add(ex);/ Expressionclass AdvanceExpression extends Expression Overridevoid interpret(Context context) System.out.println(这是高级解析器 - + context.getContent();class SimpleExpression ext
16、ends Expression Overridevoid interpret(Context context) System.out.println(这是简约解析器 - + context.getContent();public class ExpressionTest public static void main(String args) Context context = new Context();context.setContent(解析器模型);context.add(new SimpleExpression();context.add(new AdvanceExpression(
17、);context.add(new SimpleExpression();for (Expression ex : context.getList() ex.interpret(context);输出结果:这是简约解析器 - 解析器模型这是高级解析器 - 解析器模型这是简约解析器 - 解析器模型4、迭代器模式适用条件:1)访问一个聚合对象的内容而无须暴露她的内部表示。2)支持对聚合对象的多种遍历。3)为遍历不同的聚合结构提供一个统一的接口(即:支持多态迭代)。参与者:1)Iterator:迭代器定义访问和遍历元素的接口。2)ConcreteIterator:具体迭代实现迭代器接口,对该聚合遍历
18、时跟踪当前位置。3)Aggregate:聚合定义创建相应迭代器对象的接口。4)ConcreteAggregate:具体聚合实现创建相应迭代器的接口,该操作返回ConreteIterator的一个适当的实例。示例:package zantip.modules;/iteratorinterface MyIterator Object next();void first();void last();boolean hasNext();/ concreteIteratorclass MyIteratorImpl implements MyIterator private MyList list;pri
19、vate int index;public MyIteratorImpl(MyList list) index = 0;this.list = list;public void first() index = 0;public void last() index = this.list.getSize();public Object next() Object obj = this.list.get(index);index+;return obj;public boolean hasNext() return index this.list.getSize();/ Aggregateinte
20、rface MyList MyIterator iterator();Object get(int index);int getSize();void add(Object obj);/ ConcreteAggregateclass MyListImpl implements MyList private Object list;private int index;private int size;public MyListImpl() index = 0;size = 0;list = new Object100;Overridepublic MyIterator iterator() re
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
10 积分
下载 | 加入VIP,下载更划算! |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JAVA 设计 模式 行为