命令模式

来源:互联网 发布:讯龙数据恢复验证码 编辑:程序博客网 时间:2024/06/06 19:14

客户端,将不同的参数传入 对象,根据不同的请求处理,对客户参数化。

行为请求者 和 行为实现者,解耦。可以适应变化。


如果有新的遥控器,只要继承命令接口,添加遥控器相应的功能,就可以了。。

如果换了一个新的电视,如果用的是同款遥控器 (电视也支持这个功能),也是可以实现相应功能


我们对电视机有不同的操作。

抽象一个请求操作:

public interface Command{     void execute();}
接受请求的对象:
public class WatchTV{     public int currentChannel = 0;     public void turnOn(){          System.out.println("打开电视");     }     public void turnOff(){          System.out.println("关闭电视");     }     public void change(int channel){          this.currentChanel = channel;          System.out.println("正在收看"+this.currentChanel +"频道");     }}
发出请求对象(打开电视):

public class CommandOn implements Command{     private WatchTV tv;     public CommandOn(WatchTv tv){          this.tv = tv;     }     public void execute(){          tv.turnOn();     }}
发出请求对象(关闭电视):

public class CommandOff implements Command{     private WatchTV tv;     public CommandOn(WatchTv tv){          this.tv = tv;     }     public void execute(){          tv.turnOff();     }}
操作对象(遥控器):

public class Control{     private Command commandOn;     private Command commandOff;     private Command commandChange;          public Control(CommandOn on ,.....){          this.commandOn = on;          this.commandOff = off;          this.commandChange = change;     }     public void trunOn(){          commandOn.execute();     }      public void trunOff(){          commandOff.execute();     }      public void change(){          commandChange.execute();     }}

客户使用遥控器的时候:

main(){     WatchTV myTv = new WatchTV();     Command on = new CommandOn(myTv);     Command off = new CommandOff(myTv);     Control control = new Control(on,off,change);     control.turnOn();     control.turnOff();     control.change();}


你会发现 通过 不同类之间的耦合调用,使得,用户不需要去直接命令电视,而是通过遥控器去,发送命令,然后电视才去执行。中间分好多层。

请求一方。和 操作一方独立开。

关键,在于引入 命令 抽象接口。只有实现这个接口,才能和接受者关联。。。如果电视不接受 某个遥控器的命令 也是无法操作的。





0 0
原创粉丝点击