zoukankan      html  css  js  c++  java
  • C# 设计模式(16)命令模式

    命令模式

    1. 实现异步队列

    2.数据恢复,命令撤销

    代码实现:

    对象:

    namespace CommandPattern
    {
        public class Document
        {
            public int Id { get; set; }
            public string Name { get; set; }
        }
    }
    

    行为:

        public abstract class BaseCommand
        {
            protected  Document Document =null;
            protected Receiver Receiver = null;
    
            public void SetDocument(Document document)
            {
                this.Document = document;
            }
    
            public void SetReceiver(Receiver receiver)
            {
                this.Receiver = receiver;
            }
    
            public abstract void Execute();
        }
        public class ReadCommand : BaseCommand
        {
            public override void Execute()
            {
                Receiver.Name = Document.Name;
                Receiver.Read();
            }
        }
        class WriteCommand:BaseCommand
        {
            public override void Execute()
            {
                Receiver.Name = Document.Name;
                Receiver.Write();
            }
        }

    执行者:

        public class Receiver
        {
            public string Name { get; set; }
            public void Write()
            {
                Console.WriteLine($"{Name} Write Data...");
            }
            public void Read()
            {
                Console.WriteLine($"{Name} Read Data...");
            }
        }

    代码调用:

        class Program
        {
            static void Main(string[] args)
            {
                Document doc = new Document()
                {
                    Id=01,
                    Name = "Action1"
                };
    
                while (true)
                {
                    Console.WriteLine("Please Insert Command W or R");
                    string input = Console.ReadLine();
                    var instance = ConfigurationManager.AppSettings[input].Split(',')[1];
                    var method = ConfigurationManager.AppSettings[input].Split(',')[0];
                    BaseCommand cmd = (BaseCommand) Activator.CreateInstance(instance, method).Unwrap();
                    Receiver receiver = new Receiver();
                    cmd.SetReceiver(receiver);
                    cmd.SetDocument(doc);
                    cmd.Execute();
                }
            }
        }

    结果:

  • 相关阅读:
    L2-004. 这是二叉搜索树吗?
    CF934A A Compatible Pair
    CF937B Vile Grasshoppers
    CF940B Our Tanya is Crying Out Loud
    ZOJ 3182 Nine Interlinks
    ZOJ 3175 Number of Containers
    Codeforces Round #193 (Div. 2) B
    CodeForces 149D Coloring Brackets
    POJ 2653 Pick-up sticks(计算几何)
    UVA 12506 Shortest Names
  • 原文地址:https://www.cnblogs.com/YourDirection/p/14096688.html
Copyright © 2011-2022 走看看