zoukankan      html  css  js  c++  java
  • 15.命令模式(Command Pattern)

    using System;
    
    namespace ConsoleApplication8
    {
        class Program
        {
            /// <summary>
            /// 在软件系统中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”。
            /// 但在某些场合,比如要对行为进行“记录、撤销/重做、事务”等处理,这种无法抵御变化的紧耦合是不合适的。
            /// 在这种情况下,如何将“行为请求者”与“行为实现者”解耦?将一组行为抽象为对象,可以实现二者之间的松耦合[李建忠]。
            /// 这就是本文要说的Command模式。
            /// </summary>
            /// <param name="args"></param>
            static void Main(string[] args)
            {
                Document doc = new Document();
                doc.Display();
                doc.Undo();
                doc.Redo();
                Console.Read();
            }
    
            /// <summary>
            /// 文档类
            /// </summary>
            public class Document
            {
                /// <summary>
                /// 显示操作
                /// </summary>
                public void Display()
                {
                    Console.WriteLine("Display");
                }
    
                /// <summary>
                /// 撤销操作
                /// </summary>
                public void Undo()
                {
                    Console.WriteLine("Undo");
                }
    
                /// <summary>
                /// 恢复操作
                /// </summary>
                public void Redo()
                {
                    Console.WriteLine("Redo");
                }
            }
    
            /// <summary>
            /// 抽象命令
            /// </summary>
            public abstract class DocumentCommand
            {
                public Document _document;
                public DocumentCommand(Document doc)
                {
                    this._document = doc;
                }
    
                /// <summary>
                /// 执行
                /// </summary>
                public abstract void Execute();
            }
    
            /// <summary>
            /// 显示命令
            /// </summary>
            public class DisplayCommand : DocumentCommand
            {
                public DisplayCommand(Document doc)
                    : base(doc)
                {
    
                }
    
                public override void Execute()
                {
                    _document.Display();
                }
            }
    
    
            /// <summary>
            /// 撤销命令
            /// </summary>
            public class UndoCommand : DocumentCommand
            {
                public UndoCommand(Document doc)
                    : base(doc)
                {
    
                }
    
                public override void Execute()
                {
                    _document.Undo();
                }
            }
    
    
            /// <summary>
            /// 重做命令
            /// </summary>
            public class RedoCommand : DocumentCommand
            {
                public RedoCommand(Document doc)
                    : base(doc)
                {
    
                }
    
                public override void Execute()
                {
                    _document.Redo();
                }
            }
    
            /// <summary>
            /// Invoker角色
            /// </summary>
    
            public class DocumentInvoker
            {
                DocumentCommand _discmd;
                DocumentCommand _undcmd;
                DocumentCommand _redcmd;
    
                public DocumentInvoker(DocumentCommand discmd, DocumentCommand undcmd, DocumentCommand redcmd)
                {
                    this._discmd = discmd;
                    this._undcmd = undcmd;
                    this._redcmd = redcmd;
                }
    
                public void Display()
                {
                    _discmd.Execute();
                }
    
                public void Undo()
                {
                    _undcmd.Execute();
                }
    
                public void Redo()
                {
                    _redcmd.Execute();
                }
            }
        }
    }
  • 相关阅读:
    css之hover改变子元素和其他元素样式
    css实现俩端对齐的3种方法
    iOS开发——高级技术&内购服务
    iOS开发——高级技术&iCloud服务
    iOS开发——高级技术&PassBook服务
    iOS开发——高级技术&本地化与国际化详解
    iOS开发——高级技术&GameCenter服务
    iOS开发——高级技术&签名机制
    UIKit中的几个核心对象的介绍:UIApplication,UIWindow,UIViewController,UIView(layer)简单介绍
    Runtime之字典转模型实战
  • 原文地址:https://www.cnblogs.com/lgxlsm/p/4641961.html
Copyright © 2011-2022 走看看