zoukankan      html  css  js  c++  java
  • 设计模式之命令模式

       命令模式:将一个请求封装为一个对象,从而是你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。

    命令模式有如下优点:1.它能较容易地设计一个命令队列;2.在需要的情况下,可以较容易地将命令记入日志;3.允许接收请求的一方决定是否要否决请求;4.可以容易地实现请求的撤销和重做;5.由于加进新的具体命令类不影响其他类,因此增加新的具体命令类很容易;6.把请求的一个操作的对象与知道怎么执行一个操作的对象分割开来。

    下面的例子是关于烤鸡翅和烤羊肉串的实例。

    代码如下:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace 设计模式之命令模式
    {
        public class barbecuer
        {
            public void doSheep()
            {
                Console.WriteLine("烤羊肉串!");
            }
            public void doChicken()
            {
                Console.WriteLine("烤鸡翅!");
            }
        }
        public abstract class command
        {
            public barbecuer myBar;
            public void setBarbecuer(barbecuer bar)
            {
                this.myBar = bar;
            }
            public abstract void excuteCommand();
        }
        public class sheepCommand : command
        {
            public override void excuteCommand()
            {
                myBar.doSheep();
            }
        }
        public class chickenCommand : command
        {
            public override void excuteCommand()
            {
                myBar.doChicken();
            }
        }
        public class waiter
        {
            List<command> comds = new List<command>();
            public void Add(command c)
            {
                comds.Add(c);
            }
            public void Remove(command c)
            {
                comds.Remove(c);
            }
            public void doAction()
            {
                foreach (command c in comds)
                {
                    c.excuteCommand();
                }
            }
        }
        class Program
        {
            static void Main(string[] args)
            {
                sheepCommand spc1 = new sheepCommand();
                sheepCommand spc2 = new sheepCommand();
                chickenCommand ckc = new chickenCommand();
                barbecuer bar = new barbecuer();
                waiter wt = new waiter();
                spc1.setBarbecuer(bar);
                spc2.setBarbecuer(bar);
                ckc.setBarbecuer(bar);
                wt.Add(spc1);
                wt.Add(ckc);
                wt.Add(spc2);
                wt.doAction();
                wt.Remove(spc2);
                wt.doAction();
                Console.ReadKey();
            }
        }
    }

    运行结果:

  • 相关阅读:
    福大软工 · 第十二次作业
    Beta 冲刺(7/7)
    Beta 冲刺(6/7)
    Beta 冲刺(5/7)
    Beta 冲刺(4/7)
    Beta 冲刺(3/7)
    Beta 冲刺(2/7)
    福大软工 · 第十次作业
    Beta 冲刺(1/7)
    64位 CentOS NDK 编译 FFMPEG
  • 原文地址:https://www.cnblogs.com/JsonZhangAA/p/5621513.html
Copyright © 2011-2022 走看看