Java设计模式之命令模式

代码:

package com.zhangxf.command;

import java.util.ArrayList;
import java.util.List;

// 股票
class Stock {
	// 股票名称
	private String name;

	public Stock(String name) {
		this.name = name;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
}

// 股票操作类
class StockOp {
	// 操作关联账号名称
	private String account;
	// 操作关联股票
	private Stock stock;
	// 操作股票数量
	private int quantity;

	public StockOp(String account, Stock stock, int quantity) {
		this.account = account;
		this.stock = stock;
		this.quantity = quantity;
	}

	// 买股票
	public void buy() {
		System.out.println(account + " buy " + quantity + " " + stock.getName() + " ");
	}

	// 卖股票
	public void sell() {
		System.out.println(account + " sell " + quantity + " " + stock.getName() + " ");
	}

}

// 命令接口
interface Order {
	public void excecute();
}

// 买
class Buy implements Order {
	private StockOp op;

	public Buy(StockOp op) {
		this.op = op;
	}

	@Override
	public void excecute() {
		op.buy();
	}
}

// 卖
class Sell implements Order {
	private StockOp op;

	public Sell(StockOp op) {
		this.op = op;
	}

	@Override
	public void excecute() {
		op.sell();
	}
}

// 股票交易代理
class Broker {
	private List orderList;
	public Broker() {
		orderList = new ArrayList();
	}
	
	public void addTradePlan(Order order) {
		orderList.add(order);
	}
	
	public void showTradePlan() {
		System.out.println("opList:" + orderList.size());
	}
	
	public void excecuteTradePlan() {
		for(Order order: orderList) {
			order.excecute();
		}
	}
	
	public void clearTradePlan() {
		orderList.clear();
	}
}


public class Command {

	public static void main(String[] args) {
		// 创建股票
		Stock a = new Stock("STOCK A");
		Stock b = new Stock("STOCK B");
		Stock c = new Stock("STOCK C");
		
		// 创建股票操作类实例
		StockOp aOp = new StockOp("Billy", a, 100);
		StockOp bOp = new StockOp("Kate", b, 50);
		StockOp cOp = new StockOp("Jason", c, 200);
		
		// 创建股票交易代理
		Broker broker = new Broker();
		broker.addTradePlan(new Buy(aOp));
		broker.addTradePlan(new Buy(bOp));
		broker.addTradePlan(new Sell(cOp));
		
		// 显示交易计划
		broker.showTradePlan();
		
		// 执行交易计划
		broker.excecuteTradePlan();
		
		// 再次执行交易计划
		broker.excecuteTradePlan();
		
		// 清空交易计划
		broker.clearTradePlan();
	}

}

实现要点:

  1. 股票类只记录了服务的属性
  2. 股票操作类关联了具体的股票、可以对股票执行的全部操作、以及需要的具体参数
  3. 命令接口的实现类内部包含一个股票操作类,明确到底对关联股票执行何种操作。
  4. 代理类管理、存储全部命令接口的实例。

命令模式将多个单独的命令集中记录在一起,能够集中审计、执行、重复执行、回退等,有点像脚本中的批量执行。

你可能感兴趣的:(Java语言)