设计模式面对面之命令模式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式面对面之命令模式相关的知识,希望对你有一定的参考价值。

命令模式

类图:

 技术分享

技术分享

常用的实现方式:

 指令处理对象

技术分享
public interface IReceiver  {

        void Operation();
    }//end IReceiver
View Code
技术分享
public class ReceiverA : IReceiver {

        public ReceiverA(){

        }

        public void Operation(){
            Console.WriteLine("由ReceiverA处理");
        }

    }//end ReceiverA
View Code
技术分享
public class ReceiverB : IReceiver {

        public ReceiverB(){

        }

        public void Operation(){
            Console.WriteLine("由ReceiverB处理");
        }

    }//end ReceiverB
View Code

指令对象

技术分享
public interface ICommand  {

        void Execute();
    }//end ICommand
View Code
技术分享
public class CommandRealizeA : ICommand {

        private readonly IReceiver _receiver;

        public CommandRealizeA(){
            _receiver=new ReceiverA();
        }

        public void Execute(){
            _receiver.Operation();
        }

    }//end CommandRealizeA
View Code
技术分享
public class CommandRealizeB : ICommand {

        private readonly IReceiver _receiver;

        public CommandRealizeB()
        {
            _receiver=new ReceiverB();
        }

        public void Execute(){
            _receiver.Operation();
        }

    }//end CommandRealizeB
View Code

调用对象

技术分享
public class Invoker {

        private ICommand _command;

        public Invoker(){
            _command=new CommandRealizeA();//默认指令
        }

        public void Invoke()
        {
            _command.Execute();
        }

        /// 
        /// <param name="command"></param>
        public void SetCommand(ICommand command)
        {
            _command = command;
        }

    }//end Invoker
View Code

 使用场景:

 当每次请求或者动作会出现一连串操作,此时可以考虑。比如提交表单后台涉及到数据库操作,日志操作,缓存操作等等,这些操作可以用命令模式去控制。

 命令模式将命令的调用者(发出者),执行者,处理着,从一个紧耦合的动作,分离开来,主要用来复杂的动作解耦和指令(命令)管理。

 

以上是关于设计模式面对面之命令模式的主要内容,如果未能解决你的问题,请参考以下文章

设计模式面对面之工厂模式

设计模式面对面之订阅模式

设计模式面对面之单例模式

《设计模式之禅》笔记整理--面对对象设计六大原则

JUC并发编程 共享模式之工具 JUC CountdownLatch(倒计时锁) -- CountdownLatch应用(等待多个线程准备完毕( 可以覆盖上次的打印内)等待多个远程调用结束)(代码片段

设计模式之行为型状态模式