设计模式-命令模式

class User
    {
        public string name { get; set; }
        public void Action(string command)
        {
            Console.WriteLine("{0}",command);
        }
    }

abstract class Command
    {
        protected User user;
        public Command(User _user)
        {
            user = _user;
        }
        abstract public void Action();
    }
    class AddCommand : Command
    {
        public AddCommand(User _user) : base(_user)
        {
        }

        public override void Action()
        {
            user.Action("添加一个用户");
        }
    }
    class DeleteCommand : Command
    {
        public DeleteCommand(User _user) : base(_user)
        {
        }

        public override void Action()
        {
            user.Action("删除一个用户");
        }
    }

        class Invoke
    {
        private List commands = new List();
        public void AddCommand(Command command)
        {
            commands.Add(command);
        }
        public void RemoveCommand(Command command)
        {
            commands.Remove(command);
        }

        public void Notify()
        {
            foreach (var item in commands)
            {
                item.Action();
            }
        }
    }

        //前端
        static void Main(string[] args)
        {
            User user = new User();
            Demo.Command command = new Demo.AddCommand(user);
            Demo.Command command2 = new Demo.AddCommand(user);
            Demo.Command command3 = new Demo.DeleteCommand(user);
            Invoke i = new Invoke();
            i.AddCommand(command);
            i.AddCommand(command);
            i.AddCommand(command3);
            i.Notify();
            Console.ReadLine();
        }

总结:将请求封装成对象,可以随意扩展请求,并支持请求排队,随意增加请求或者撤销请求。
解耦了请求者与执行者。多了个中间类记录请求者的各种请求,然后一次性传达给执行者。
优点:支持撤销,回滚,支持把请求写入日志。
缺点:命令类会很多。

创新互联建站成立于2013年,我们提供高端成都网站建设成都网站制作成都网站设计公司、网站定制、成都全网营销微信平台小程序开发、微信公众号开发、营销推广服务,提供专业营销思路、内容策划、视觉设计、程序开发来完成项目落地,为木屋企业提供源源不断的流量和订单咨询。


网站名称:设计模式-命令模式
文章位置:http://myzitong.com/article/ghicjh.html