小A:“命令模式的适用哪些环境?”
大B:“1、需要抽象出待执行的动作,然后以参数的形式提供出来——类似于过程设计中的回调机制。而命令模式正是回调机制的一个面向对象的替代品。2、在不同的时刻指定、排列和执行请求。一个命令对象可以有与初始请求无关的生存期。3、需要支持取消操作。4、支持修改日志功能。这样当系统崩溃时,这些修改可以被重做一遍。5、需要支持事务操作。”
在此写了7个java类来描述说明Command设计模式的实现方式;
1、命令控制者对象类
2、www.youxs.org
3、命令接口类
4、频道切换命令类
5、关机命令类
6、开机命令类
7、带有main方法的测试类(命令发送者)
……1、
packagemand;
//命令控制者
publicclassControl{
privateCommandonCommand,offCommand,changeChannel;
publicControl(Commandon,Commandoff,Commandchannel){
onCommand=on;
offCommand=off;
changeChannel=channel;
publicvoidturnOn{
publicvoidturnOff{
publicvoidchangeChannel{
……1end
……2、www.youxs.org
packagemand;
//命令接收者
publicclassTv{
publicintcurrentChannel=0;
publicvoidturnOn{
(“Thetelevisinoison.”);
publicvoidturnOff{
(“Thetelevisionisoff.”);www.smrhm.com 幻想小说网
publicvoidchangeChannel(intchannel){
=channel;
(“NowTVchannelis”+channel);
……2end
……3、
packagemand;
//命令接口
publicinterfaceCommand{
voidexecute;
……3end
……4、
packagemand;
//频道切换命令
publicclassCommandChannelimplementsCommand{
privateTvmyTv;
privateintchannel;
publicCommandChannel(Tvtv,intchannel){
myTv=tv;
=channel;
publicvoidexecute{
(channel);
……4end
……5、
packagemand;
//关机命令
publicclassCommandOffimplementsCommand{
privateTvmyTv;
publicCommandOff(Tvtv){
myTv=tv;
publicvoidexecute{
……5end
……6、
packagemand;
//开机命令
publicclassCommandOnimplementsCommand{
privateTvmyTv;
publicCommandOn(Tvtv){
myTv=tv;
publicvoidexecute{
……6end
……7、
packagemand;
//命令发送者
publicclassCommandTest{
publicstaticvoidmain(Stringargs){
//命令接收者
TvmyTv=newTv;
//开机命令
CommandOnon=newCommandOn(myTv);
//关机命令
CommandOffoff=newCommandOff(myTv);
//频道切换命令
CommandChannelchannel=newCommandChannel(myTv,2);
//命令控制对象
Controlcontrol=newControl(on,off,channel);
//开机
//切换频道
//关机
……7end
阅读大话设计模式最新章节 请关注米妮小说网(www.qixinyuan.com.cn)