欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

设计模式系列 - 命令模式

程序员文章站 2022-09-04 18:01:35
命令模式是一种数据驱动型的设计模式,它以命令的形式包裹在对象中,并传递给调用者。 介绍 命令模式属于行为型设计模式,它通过将一个请求封装成一个对象,从而使我们可以用不同的请求对客户端进行参数化。 类图描述 代码实现 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();
    }
}

总结

命令模式通过将实体和行为进行分离,使得对行为的操作不依赖于实体,双方解耦,降低了系统耦合度。