命令模式

概念

  说到命令模式,我就想到了公司让开发产品的时候,这里就靠这个举个例子。先来段具体的定义:将一个请求封装为一个对象,从而使我们可用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。命令模式是一种对象行为型模式,其别名为动作(Action)模式或事务(Transaction)模式。

角色

抽象命令:定义操作。
具体的命令:完成操作。
调用者:添加命令和执行。
执行者:提供具体命令执行操作(做事的)。

上代码

  先解释下大概模拟的流程,产品经理向外界提供公司能进行的哪些开发,然后客户选择后,产品经理调用这些命令,让开发来开发产品。这里就将执行者与调用者分开了,避免各位开发大牛直接和客户接触。

首先是执行者:各位开发大牛
/**
 * 开发人员,这里模拟的是具体的执行者
 *
 */
public class Coders {
	
	public void doApp(){
		System.out.println("开发app");
	}
	
	public void doWeb(){
		System.out.println("开发后台");
	}
	
	public void fixComputer(){
		System.out.println("修电脑");
	}
}
然后是抽象的命令接口与具体的命令
public interface Demand {
	void execute();
}
/**
 * app 开发功能。
 * 像外包公司要向客户展示的,我们能做什么一样。
 *这里模拟的是具体的命令。
 */
public class AppDemand implements Demand {

	private Coders coders;

	public AppDemand(Coders coders) {
		this.coders = coders;
	}

	@Override
	public void execute() {
		coders.doApp();
	}

}
public class WebDemand implements Demand {
	
	private Coders coders;

	public WebDemand(Coders coders) {
		this.coders = coders;
	}

	@Override
	public void execute() {
		coders.doWeb();
	}
}
接下来就是产品经理了,这里模拟的是调用者

  顺带说一嘴,这里本该添加删除操作的。

/**
 * 产品经理。这里模拟的是调用者
 *
 */
public class ProductorManager {
	
	private List<Demand> demands = new ArrayList<>();
	
	public void addDemands(Demand demand){
		demands.add(demand);
	}
	
	public void doProduce(){
		for(Demand demand:demands){
			demand.execute();
		}
		demands.clear();
	}
}
客户端测试类
public class Client {
	public static void main(String[] args) {
		//开公司前的准备  向外界提供哪些  命令
		Coders coders = new Coders();
		ProductorManager pm = new ProductorManager();
		AppDemand app = new AppDemand(coders);
		WebDemand web = new WebDemand(coders);
		
		//具体的命令执行
		pm.addDemands(app);
		pm.addDemands(web);
		pm.doProduce();
		
	}
}

结果

The End

优点:实现了命令与执行者的分离,降低了耦合度;可以提供撤销操作。
缺点:可能会导致具体的命令类过多。

需要使用的时候,如果满足优点中的某一条即可。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值