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

  • 相关阅读:
    高并发下缓存失效问题及解决方案
    行为型设计模式
    Redisson
    行为型设计模式
    Docker 安装 Elasticsearch 和 Kibana
    行为型设计模式
    C# 使用 WebBrowser 实现 HTML 转图片功能
    .NET 程序下锐浪报表 (Grid++ Report) 的绿色发布指南
    .NET 程序员的 Playground :LINQPad
    Windows 服务器上的 WordPress 站点优化笔记
  • 原文地址:https://www.cnblogs.com/courtier/p/4292187.html
Copyright © 2011-2022 走看看