当前位置: 移动技术网 > IT编程>软件设计>设计模式 > 设计模式系列 - 命令模式

设计模式系列 - 命令模式

2018年12月27日  | 移动技术网IT编程  | 我要评论
命令模式是一种数据驱动型的设计模式,它以命令的形式包裹在对象中,并传递给调用者。 介绍 命令模式属于行为型设计模式,它通过将一个请求封装成一个对象,从而使我们可以用不同的请求对客户端进行参数化。 类图描述 代码实现 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();
    }
}

总结

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

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网