命令模式 是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。
总结:命令工厂 负责 添加命令(对象) 执行命令(对象)或批量执行命令(对象)
优点: 1、降低了系统耦合度。 2、新的命令可以很容易添加到系统中去。
下面以 代码形式 展示 命令模式
namespace 命令模式
{
internal class Program
{
static void Main(string[] args)
{
Stock stock = new Stock();
BuyStock buyStock = new BuyStock(stock);
SellStock sellStock = new SellStock(stock);
StockOrder stockOrder = new StockOrder();
stockOrder.AddOrder(buyStock);
stockOrder.AddOrder(sellStock);
stockOrder.PrintOrder();
/*
* 控制台 输出
* 以156买入APPLE INC股票
以156卖出APPLE INC股票
*/
}
}
//一条 命令接口
public interface Order
{
void Movement();
}
// 业务
public class Stock
{
private string StockName = "APPLE INC";
private int StockPrice = 156;
public void Buy()
{
Console.WriteLine($"以{StockPrice}买入{StockName}股票");
}
public void Sell()
{
Console.WriteLine($"以{StockPrice}卖出{StockName}股票");
}
}
// 分离业务
public class BuyStock : Order
{
private Stock stock;
public BuyStock(Stock stock)
{
this.stock = stock;
}
public void Movement()
{
stock.Buy();
}
}
// 分离业务
public class SellStock : Order
{
private Stock stock;
public SellStock(Stock stock)
{
this.stock = stock;
}
public void Movement()
{
stock.Sell();
}
}
// 使用 命令模式
public class StockOrder
{
private List<Order> orders = new List<Order>();
//添加命令
public void AddOrder(Order order)
{
orders.Add(order);
}
//执行命令
public void PrintOrder()
{
foreach (Order order in orders)
{
order.Movement();
}
//命令 执行完 释放
orders.Clear();
}
}
}
缺点:使用命令模式可能会导致某些系统有过多的具体命令类。