命令模式

命令模式: 将请求封闭成对象,这可以让你使用不同的请求,队列.或者日志请求来参数化其他对象.命令模式式可支持撤销技术操作.

好处:

◆很容易构造一个命令队列

◆记录相关的命令日志

◆增加命令的状态,实现命令的撤销和重做

◆允许接受请求的一方决定是否可做

◆新的命令轻而易举可以加入其中

缺点:可能会有过多的具体命令类存在

实现:

也不难,第一步关键是建立Command对象。拥有点面向对象的思想,就知道把它先抽象,让继承它的对象去具体实现。Client对象是发布命令的。Invoker对象是传递命令的,就是跑腿的。Receiver是受气包,底层最累的程序员,负责干活吧。看看下面的类图就清晰了:

[img]http://www.dabaoku.com/dabaoku/uploads/allimg/091114/21324911A-0.jpg[/img]

public interface Switch {
public void open();
public void close();
}

public class TVSwitch implements Switch{
@Override
public void close() {
System.out.println("close the TV");
}

@Override
public void open() {
System.out.println("open the TV");
}
public void pause(){
System.out.println("pasue the TV");
}
}

public class LightSwitch implements Switch {

@Override
public void close() {
System.out.println("close the light");
}

@Override
public void open() {
System.out.println("open the light");

}

}



public interface Command {
public LightSwitch ls=new LightSwitch();
public TVSwitch tvs=new TVSwitch();
public void execute();
}

public class OpenTVCommand implements Command {

@Override
public void execute() {
tvs.open();
}

}



public class Invoker {
Command command;

public void setCommand(Command command) {
this.command = command;

}
public void execute(){
command.execute();
}
}



public class Test {
public static void main(String[] args){
Invoker in=new Invoker();
in.setCommand(new OpenTVCommand());
in.execute();
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值