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();
            }
        }
    }
}
时间: 2024-08-07 05:26:14

15.命令模式(Command Pattern)的相关文章

设计模式 - 命令模式(command pattern) 撤销(undo) 具体解释

命令模式(command pattern) 撤销(undo) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy 參考命令模式: http://blog.csdn.net/caroline_wendy/article/details/31379977 命令模式能够用于运行撤销(undo)操作. 详细方法: 1. 对象类中须要保存状态, 如level. package command; public class CeilingFan { String lo

设计模式 - 命令模式(command pattern) 具体解释

命令模式(command pattern) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy 命令模式(command pattern) : 将请求封装成对象, 以便使用不同的请求\队列\日志来參数化其它对象. 命令模式也能够支持撤销操作. 简单的命令模式的实现: 1. 详细的类, 每个类都有特定的方法: /** * @time 2014年6月9日 */ package command; /** * @author C.L.Wang * */ publ

设计模式 - 命令模式(command pattern) 详解

命令模式(command pattern) 详解 本文地址: http://blog.csdn.net/caroline_wendy 命令模式: 将请求封装成对象, 以便使用不同的请求\队列\日志来参数化其他对象. 命令模式也支持可撤销操作. 命令模式: 调用者(Invoker); 命令(Command): 可执行方法(execute), 具体命令(Concrete Command); 接受者(Receiver): 调用命令(Set Command); 具体方法: 1. 具体对象. /** *

设计模式 - 命令模式(command pattern) 多命令 详解

命令模式(command pattern) 多命令 详解 本文地址: http://blog.csdn.net/caroline_wendy 参考命令模式: http://blog.csdn.net/caroline_wendy/article/details/31379977 具体步骤: 1. 多命令, 把未使用的命令, 初始化为空对象(NoCommand), 根据参数(slot), 选择输出命令. /** * @time 2014年6月16日 */ package command; /**

设计模式 - 命令模式(command pattern) 撤销(undo) 详解

命令模式(command pattern) 撤销(undo) 详解 本文地址: http://blog.csdn.net/caroline_wendy 参考命令模式: http://blog.csdn.net/caroline_wendy/article/details/31379977 命令模式可以用于执行撤销(undo)操作. 具体方法: 1. 对象类中需要保存状态, 如level. package command; public class CeilingFan { String loca

设计模式 - 命令模式(command pattern) 宏命令(macro command) 详解

命令模式(command pattern) 宏命令(macro command) 详解 本文地址: http://blog.csdn.net/caroline_wendy 参考: 命名模式(撤销): http://blog.csdn.net/caroline_wendy/article/details/31419101 命令模式可以执行宏命令(macro command), 即多个命令的组合操作. 具体方法:  1. 其余代码与命令(撤销)一致 2. 添加宏命令(macro command),

设计模式 - 命令模式(command pattern) 多命令 具体解释

命令模式(command pattern) 多命令 具体解释 本文地址: http://blog.csdn.net/caroline_wendy 參考命令模式: http://blog.csdn.net/caroline_wendy/article/details/31379977 具体步骤: 1. 多命令, 把未使用的命令, 初始化为空对象(NoCommand), 依据參数(slot), 选择输出命令. /** * @time 2014年6月16日 */ package command; /*

C#设计模式(15)——命令(Command Pattern)

一.前言 之前一直在忙于工作上的事情,关于设计模式系列一直没更新,最近项目中发现,对于设计模式的了解是必不可少的,当然对于设计模式的应用那更是重要,可以说是否懂得应用设计模式在项目中是衡量一个程序员的技术水平,因为对于一个功能的实现,高级工程师和初级工程师一样都会实现,但是区别在于它们实现功能的可扩展和可维护性,也就是代码的是否“优美”.可读.但是,要更好地应用,首先就必须了解各种设计模式和其应用场景,所以我还是希望继续完成设计模式这个系列,希望通过这种总结的方式来加深自己设计模式的理解. 二.

设计模式之命令模式---Command Pattern

模式的定义 命令模式是一个高内聚的模式,定义如下: Encapsulate a request as an object,thereby letting you parameterize clients with different requests,queue or log requests,and support undoable operations 将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录日志,可以提供命令的撤销和恢复功能. 模式的使用场景 只要