C#面向对象设计模式14:命令模式(Command)

命令模式,先占位,由于文章太耗时,后面补上。

using System;
using System.Collections.Generic;
using System.Linq;

namespace SimpleFactory
{
    class Program
    {
        static void Main(string[] args)
        {
            服务员 servicer = new 服务员();
            马师傅 shifu = new 马师傅();
            var work1 = new 烧菜(shifu, "酸菜鱼");
            servicer.客人下单(work1);
            servicer.下达命令();

            Console.WriteLine();

            老板娘 boss = new 老板娘();
            张阿姨 ayi = new 张阿姨();
            var work2 = new 收拾(ayi);
            boss.赶紧干活(work2);
            boss.下达命令();
        }
    }

    /// <summary>
    /// 命令接收者接口
    /// </summary>
    public interface 厨师
    {
        void 制作(string 菜);
    }

    public class 刘师傅 : 厨师
    {
        public void 制作(string 菜)
        {
            Console.WriteLine($"做出了一道香喷喷的菜:{菜}");
        }
    }

    public class 马师傅 : 厨师
    {
        public void 制作(string 菜)
        {
            Console.WriteLine($"做出了一道香喷喷的菜:{菜}");
        }
    }

    /// <summary>
    /// 后勤人员接口,如洗碗工、扫地阿姨
    /// </summary>
    public interface 后勤
    {
        void 作业();
    }

    public class 孙阿姨 : 后勤
    {
        public void 作业()
        {
            Console.WriteLine($"扫啊扫,地板扫得很干净了");
        }
    }

    public class 张阿姨 : 后勤
    {
        public void 作业()
        {
            Console.WriteLine($"洗啊洗,今天碗太多了,还在不停的洗碗中。。。");
        }
    }

    public interface 命令
    {
        void 执行命令();
    }

    public abstract class 命令控制中心 : 命令
    {
        protected 命令控制中心() { }

        public abstract void 执行命令();
    }

    public class 烧菜 : 命令控制中心
    {
        private 厨师 _厨师;
        private string _需要做的菜;

        public 烧菜(厨师 厨师, string 菜)
        {
            this._厨师 = 厨师;
            this._需要做的菜 = 菜;
        }

        public override void 执行命令()
        {
            Console.WriteLine($"{this._厨师.GetType().Name}接到了指令");
            this._厨师.制作(this._需要做的菜);
        }
    }

    public class 收拾 : 命令控制中心
    {
        private 后勤 _后勤;

        public 收拾(后勤 后勤)
        {
            this._后勤 = 后勤;
        }

        public override void 执行命令()
        {
            Console.WriteLine($"{this._后勤.GetType().Name}接到了指令");
            this._后勤.作业();
        }
    }

    public class 服务员
    {
        private 命令 _command;
        public void 客人下单(命令 command)
        {
            this._command = command;
        }

        public void 下达命令()
        {
            this._command.执行命令();
        }
    }

    public class 老板娘
    {
        private 命令 _command;
        public void 赶紧干活(命令 command)
        {
            this._command = command;
        }

        public void 下达命令()
        {
            this._command.执行命令();
        }
    }
}

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值