命令模式

一、背景

        想像一下,如果一个军官要派他的A下属去炸碉堡,B下属去炸军火库,C下属去狙击敌军头目,如果要安排下属的执行步骤及具体细节,军官是不是得累死?同样,如果系统中要去执行某些操作,怎么办?直接new出对象然后执行该操作的方法?如果该操作是多个方法的组合呢?是不是好累,而且如果想要执行的操作多了,想想这个工作量~,所以命令模式出现了。

二、概念

       回顾我们看过的电视电影,军官要派下属们去执行某个任务,是不是给一个命令就ok。同样我们的命令模式也是这样,像我们打开windows 的dos操作界面,或者linux的shell客户端,要执行什么操作给个命令,管他什么三七二十一,各种细节由命令的底层代码去实现,我们只需轻松的记得哪个命令是什么功能就ok。

       命令模式:在软件系统中 “行为请求者”通常与 “行为实现者” 呈现一种紧耦合。在某些场合,如果需对行为进行 记录,撤销,事物等操作,这种无法应对变化的紧耦合是不合适的。这种情况下 将“行为请求者”与 “行为实现者”进行解耦,将一组行为抽象为对象,实现二者间的松耦合。这就是命令模式。

三、代码实例

/**
 * 命令接口
 */
interface Command {
	public void exe();
}

/**
 * 传递命令角色 减轻命令者与被命令者的耦合关系
 */
class Invoker {
	private Command command;

	public Invoker(Command command) {
		this.command = command;
	}

	public void action() {
		command.exe();
	}
}

/**
 * 具体的命令
 * 
 */
class MyCommand implements Command {
	private Receiver receiver;

	public MyCommand(Receiver receiver) {
		this.receiver = receiver;
	}

	@Override
	public void exe() {
		receiver.action();
	}

}

/**
 * 具体的执行命令类(命令接收者)
 */
class Receiver {
	public void action() {
		System.out.println("执行命令!");
	}
}

public class CommandPatternDemo {
	public static void main(String[] args) {
		Receiver receiver = new Receiver();
		Command command = new MyCommand(receiver);

		Invoker invoker = new Invoker(command);
		invoker.action();
	}
}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值