命令模式

命令模式

命令模式:讲一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录日志,以及支持可撤销的操作。 是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。
命令模式将行为请求者与行为实现者松耦合,下面是一个买卖股票的例子,由于本人对于命令模式这块理解不到位,所以请大家帮忙指点哈,菜鸟才开始学习,希望大家提供点帮助。
一系列请求的封装类,在接下来是Order的衍生类,可以理解为订单,

public interface Order {
		void execute();
}

public class SellStock implements Order{
	private Stock stock;
	
	
	public void setStock(Stock stock) {//订单中含有最终的执行者实例,这个是why?订单记录者在记录时就知道这个订单由谁前去执行,直接在这里赋值,
		this.stock = stock;
	}
	
	@Override
	public void execute() {
		stock.sell();
	}
}
public class BuyStock implements Order{

	private Stock stock;
	
	public void setStock(Stock stock) {
		this.stock = stock;
	}
	
	@Override
	public void execute() {
		stock.buy();
	}
	
}

请求的最终执行类,在订单类中使用它,并且最终通过它来执行股票的购买和挂牌出售

public class Stock {

	private String name = "XXX Stock";
	private int quality = 10;
	
	
	public void buy() {
		System.out.println("buy stock "+name+",quality:"+quality);
	}
	
	public void sell() {
		System.out.println("sell stock "+name+",quality"+quality);
	}
}

一个中间者,主要用来记录订单,并且通知执行者执行订单:

public class ExecutCommand {

	private List<Order> orders = new ArrayList<>();
	
	public void addOrer(Order order) {
		orders.add(order);
	}
	
	public void placeOrder() {
		for (Order order : orders) {
			order.execute();
		}
		
		orders.clear();
	}
	
}

在实例中使用这个命令:
public static void main(String[] args) {
		
		ExecutCommand command = new ExecutCommand();//中间的传话筒,中间类
		Stock stock = new Stock();//接收者,命令的执行者
		BuyStock buyStock = new BuyStock();//命令,
		SellStock sellStock = new SellStock();//命令
		buyStock.setStock(stock);
		sellStock.setStock(stock);
		command.addOrer(buyStock);
		command.addOrer(sellStock);
		
		command.placeOrder();
		
	}

输出结果

buy stock XXX Stock,quality:10

sell stock XXX Stock,quality10

这就是一个简单的命令模式实现,虽然没有实现取消,添加的功能,但是这个取消添加是可能会有失败的情况存在的。

包含三个部分,订单(命令),执行者(命令执行者),中间者(记录及通知执行)。订单是由中间者记录产生,然后分配给执行者,并通知执行者完成订单。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值