C# 设计模式 行为型模式 之 命令模式

命令模式 是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。

总结:命令工厂 负责 添加命令(对象)  执行命令(对象)或批量执行命令(对象)

优点: 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();
        }
    }
}

缺点:使用命令模式可能会导致某些系统有过多的具体命令类。

猜你喜欢

转载自blog.csdn.net/q8812345qaz/article/details/127599482
今日推荐