命令模式是一種數據驅動型的設計模式,它以命令的形式包裹在對象中,並傳遞給調用者。 介紹 命令模式屬於行為型設計模式,它通過將一個請求封裝成一個對象,從而使我們可以用不同的請求對客戶端進行參數化。 類圖描述 代碼實現 1、創建命令介面 2、創建一個模擬請求類 3、創建命令介面的實現類 4、創建命令調用 ...
命令模式是一種數據驅動型的設計模式,它以命令的形式包裹在對象中,並傳遞給調用者。
介紹
命令模式屬於行為型設計模式,它通過將一個請求封裝成一個對象,從而使我們可以用不同的請求對客戶端進行參數化。
類圖描述
代碼實現
1、創建命令介面
public interface IOrder
{
void Execute();
}
2、創建一個模擬請求類
public class Stock
{
private string name = "ABC";
private int quantity = 10;
public void Buy()
{
Console.WriteLine($"Stock [name:{name} Quantity:{quantity}] bought");
}
public void Sell()
{
Console.WriteLine($"Stock [Name:{name} Quantity:{quantity}] sold");
}
}
3、創建命令介面的實現類
public class BuyStock:IOrder
{
private Stock abcStock;
public BuyStock(Stock abcStock)
{
this.abcStock = abcStock;
}
public void Execute()
{
this.abcStock.Buy();
}
}
public class SellStock:IOrder
{
private Stock abcStock;
public SellStock(Stock abcStock)
{
this.abcStock = abcStock;
}
public void Execute()
{
abcStock.Sell();
}
}
4、創建命令調用類
public class Broker
{
private List<IOrder> orderList = new List<IOrder>();
public void TakeOrder(IOrder order)
{
orderList.Add(order);
}
public void PlaceOrders()
{
foreach (var order in orderList)
{
order.Execute();
}
orderList.Clear();
}
}
5、上層調用
class Program
{
static void Main(string[] args)
{
var abcStock = new Stock();
var buyStockOrder = new BuyStock(abcStock);
var sellStock = new SellStock(abcStock);
var broker = new Broker();
broker.TakeOrder(buyStockOrder);
broker.TakeOrder(sellStock);
broker.PlaceOrders();
Console.ReadKey();
}
}
總結
命令模式通過將實體和行為進行分離,使得對行為的操作不依賴於實體,雙方解耦,降低了系統耦合度。