java设计模式(十六):命令模式

一:命令模式

 命令模式,看可以从名字看出来,就是命令。那么命令模式至少包含3个主体内容,命令发出者、命令内容,命令执行者。在官方的定义中:将一个请求封装陈一个对象,使用不同的请求对客户端进行参数化。

命令模式的应用场景:

(1)抽象化动作指令

(2)支持操作取消

命令模式的涉及的角色:
(1)命令内容:包含命令接口抽象化和命令的具体实现

(2)命令的发出者:命令的发出者

(3)命令的执行者:命令执行者

二:代码解析

(1)命令

package test;

/*
 * 命令抽象
 */
public interface Command {
 
	//执行
	public void excute();
	
	//取消
	public void unDo();
	
}



package test;

/*
 * 命令的实现
 */
public class ConcreteCommand implements Command{
	//绑定一个执行者
	Receiver  rv;
	
	public ConcreteCommand(Receiver rv) {
		this.rv = rv;
	}

	public void excute() {
		
		rv.action();
		
	}

	public void unDo() {
		
		rv.unAction();
		
	}

}

(2)任务的执行者


package test;

/*
 * 任务的执行者
 */
public class Receiver {
	public void action() {
		         System.out.println("执行一个命令");
		      }
		 
		     public void unAction() {
		         System.out.println("撤销一个命令");
		     }
}

(3)命令的发出者

package test;

/*
 * 命令发出者
 */
public class Invoker {

    // 调用者持有一个命令对象
    Command command;

    public Command getCommand() {
        return command;
    }

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

    // 执行命令
    public void excuteCommmand() {
        command.excute();
    }

    // 撤销命令
    public void undoCommand() {
        command.unDo();
    }
}

(4)测试

public class Client {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // 创建命令的接受者
        Receiver receiver = new Receiver();
        // 创建命令对象,并设定它的接受者
        Command command = new ConcreteCommand(receiver);
        // 创建命令执行者,并将相应的命令作为参数传递给Invoker
        Invoker invoker = new Invoker();
        invoker.setCommand(command);
        // Client端测试一下
        invoker.excuteCommmand();
        invoker.undoCommand();
    }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值