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();
                }
            }
        }
    }
  • 相关阅读:
    javascript检测浏览器插件
    登陆注册数据库设计与任务分配
    做网站的一些定律原理和效应
    为什么我们应该像盖房子那样写程序?
    最近项目中遇到的一些设计问题
    反向代理缓存
    《你必须知道的.NET》读书笔记
    锋利的Jquery读书笔记
    将pdf转成jpg格式
    《你必须知道的.NET》第五章读书笔记
  • 原文地址:https://www.cnblogs.com/lgxlsm/p/4641961.html
Copyright © 2011-2022 走看看