欢迎来到天天文库
浏览记录
ID:30863028
大小:54.00 KB
页数:6页
时间:2019-01-03
《每周学点设计模式(3)——命令模式-java开发java经验技巧》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、每周学点设计模式(3)——命令模式-JavaJT-发Java经验技巧每周学点设计模式(3)——命令模式木文作者:ImportNew・hejiani未经许口J,禁止转载!概述在面向对象编程中,命令模式属于行为型(behavior)设计模式,用于“行为发送者”与“行为接收者”Z间的解耦。(行为发送者为发起某个操作的对象,接收者为执行该操作请求的对象)。命令模式的结构如下图所示:命令模式结构图命令模式的常见使用场景有:•Java菜单项和按钮的动作处理•为宏(复合命令)提供支持(记录和回退的宏操作)•“u
2、ndo”操作•Java进度条•口志、请求队列等使用命令模式实现事务假定需要TCP端口连接的用于接受和处理用户请求事务的服务器,这些事务包含很多命令。如果使用switch语句在case屮调用每个命令,会导致程序耦合度增加,不符合面向对象设计思想。将这些命令封装为对象将请求者和接受者解耦,这样的设计更加合适。importjava,uti1.*;finalclassCommandReceiver{privateint[]c;privateCommandArgumenta;privateCommandRe
3、ceiver(){c=newint[2];}privatestaticCommandReceiveror=newCommandReceiver();publicstaticCommandRcccivcrgctllemdie(){returncr;}publicvoidsetCommandArgument(CommandArgumenta){this,a=a;}publicvoidmethAddO{c=a.getArguments();System,out.println(〃Theresultis〃
4、+(c[0]+c[l]));}publicvoidmethSubtract(){c=a.getArguments();System,out.println(/zTheresultis"+(c[0]-c[l]));}命令模式代码类图CommandReceiver是命令接收者角色,实现了所冇的命令处理方法,同时它作为单例实现。classCommandManager{privatcCommandmyCommand;publicCommandManager(CommandmyCommand){this.m
5、yCommand二myCommand;}publicvoidrunCommands(){myCommand.execute();}}CommandManager是调用者角色,它的私有变量myCommand传入TransactionCommandX'j象。当runCommands()被调用时,选择合适的TransactionCommand对象的方法。classTransactionCommandimplementsCommand{privateCommandReceivercommandreceiv
6、er;privateVectorcommandrmmelist,commandorgumentlist;privateStringcommandnamc;privateCommandArgumentcommandargument;privateCommandcommand;publicTransactionCommand(){this(nul1,null);ijpublicTransactionCommand(Vectorcommandnamelist,Vectorcominandargumen1
7、1ist){this,commandnamelist二commandnamelist;this.commandorgumentlist=commandorgumentlist;commandrcccivcr二CommandRcccivcr.gctlbndlc();}publicvoidexecute(){for(inti二0;i8、ment二(CommandArgument)((commandargument1ist・get(i)));cominandreceiver.setCominandArgument(cominandargument);Stringclassname二commandname+〃Comniand〃;try{Classcis二Class.forNamc(classname);command二(Command)cis•ncwlnstancc();catch(Throwablee){Syste
8、ment二(CommandArgument)((commandargument1ist・get(i)));cominandreceiver.setCominandArgument(cominandargument);Stringclassname二commandname+〃Comniand〃;try{Classcis二Class.forNamc(classname);command二(Command)cis•ncwlnstancc();catch(Throwablee){Syste
此文档下载收益归作者所有