zoukankan      html  css  js  c++  java
  • 从电视机的角度来看设计模式之命令模式

          转载请声明:http://www.cnblogs.com/courtier/p/4292187.html

    • 命令模式的简介:

       用于“行为请求者”与“行为实现者”解耦,可实现二者之间的松耦合,以便适应变化。

       2012010622255792

    • 从代码方面来理解(我:调用者  遥控器:操作者又称为虚执行者 电视机:执行者):
    package command;
    
    public interface Command {
        //延迟开机:
        void delay(String str);
        //暂停一下:
        void pause(String str);
        //马上开始:
        void start(String str);
    }
    • 操作者必须持有执行者(不然,怎么知道交给谁):
    package command;
    
    public class ConcreteCommand implements Command{
        //持有执行者的引用
        private Receiver receiver;
        
        
        
        public ConcreteCommand(Receiver receiver) {
            super();
            this.receiver = receiver;
        }
    
        @Override
        public void delay(String str) {
            // TODO Auto-generated method stub
            str = "延迟了30秒!" + str;
            receiver.delay(str);
        }
    
        @Override
        public void pause(String str) {
            // TODO Auto-generated method stub
            str = "暂停!"+str;
            receiver.pause(str);
        }
    
        @Override
        public void start(String str) {
            // TODO Auto-generated method stub
            receiver.start(str);
        }
    
    }
    • 真正的执行者::
    package command;
    
    public class ConcreteCommand implements Command{
        //持有执行者的引用
        private Receiver receiver;
        
        
        
        public ConcreteCommand(Receiver receiver) {
            super();
            this.receiver = receiver;
        }
    
        @Override
        public void delay(String str) {
            // TODO Auto-generated method stub
            str = "延迟了30秒!" + str;
            receiver.delay(str);
        }
    
        @Override
        public void pause(String str) {
            // TODO Auto-generated method stub
            str = "暂停!"+str;
            receiver.pause(str);
        }
    
        @Override
        public void start(String str) {
            // TODO Auto-generated method stub
            receiver.start(str);
        }
    
    }
    • Client:它并不是真正的客户,它是操作者与执行者的桥梁:
    package command;
    //组合体,因为,只有它才知道我的参数给谁调用。如果,没有它就好像一台遥控器的红外线只能一台机器用一样.
    public class Client {
        //遥控器
        private static Command command;
        //那台电视机
        private Receiver receiver;
            
        public Client(Receiver receiver) {
            super();
            this.receiver = receiver;
        }
        //对准哪台电视机
        public void assemble()
        {
            command = new ConcreteCommand(receiver);
        }
        
    
    }
    • 真正的调用者:
    package command;
    //真正的调用者
    public class Invoker {
        //持有命令参数
        private Command command;
    
        public Invoker(Command command) {
            super();
            this.command = command;
        }
        
        public void runDelay(String str)
        {
            //调用了延迟,延迟多少秒由Command来决定了
            command.delay(str);
        }
        public void runPause(String str)
        {
            //调用了暂停
            command.pause(str);
        }
        public void runStart(String str)
        {
            //调用了开始
            command.start(str);
        }
    }
    • 运行结果:

    image (源代码:https://github.com/aliencool/Design-Pattrn/tree/master/command)

    • 结束语:

           命令模式是GOF经典模式之一,应用于Runnable

  • 相关阅读:
    js--未来元素
    Nginx 浏览器打开是下载状态
    JS对象的深拷贝
    微信小程序--扫描二维码
    js--call( )/apply()/bind()--应用
    数学书籍
    【活动】你有创意我有奖!摹客X飞书2020产品设计大赛邀你来战
    APP设计实例解析,深色模式为什么突然就火了?
    焦虑求职季又至:2020UI设计师作品集如何准备?
    QQ音乐 vs 网易云音乐,用户体验哪家强?
  • 原文地址:https://www.cnblogs.com/courtier/p/4292187.html
Copyright © 2011-2022 走看看