zoukankan      html  css  js  c++  java
  • 命令模式

    参考:http://www.cnblogs.com/java-my-life/archive/2012/06/01/2526972.html

    命令模式的结构
      命令模式是对命令的封装。命令模式把发出命令的责任和执行命令的责任分割开,委派给不同的对象。
    
      每一个命令都是一个操作:请求的一方发出请求要求执行一个操作;接收的一方收到请求,并执行操作。命令模式允许请求的一方和接收的一方独立开来,使得请求的一方不必知道接收请求的一方的接口,更不必知道请求是怎么被接收,以及操作是否被执行、何时被执行,以及是怎么被执行的。
    
      命令允许请求的一方和接收请求的一方能够独立演化,从而具有以下的优点:
    
      (1)命令模式使新的命令很容易地被加入到系统里。
    
      (2)允许接收请求的一方决定是否要否决请求。
    
      (3)能较容易地设计一个命令队列。
    
      (4)可以容易地实现对请求的撤销和恢复。
    
      (5)在需要的情况下,可以较容易地将命令记入日志。
    
      下面以一个示意性的系统,说明命令模式的结构。

     命令模式涉及到五个角色,它们分别是:
    
      ●  客户端(Client)角色:创建一个具体命令(ConcreteCommand)对象并确定其接收者。
    
      ●  命令(Command)角色:声明了一个给所有具体命令类的抽象接口。
    
      ●  具体命令(ConcreteCommand)角色:定义一个接收者和行为之间的弱耦合;实现execute()方法,负责调用接收者的相应操作。execute()方法通常叫做执行方法。
    
      ●  请求者(Invoker)角色:负责调用命令对象执行请求,相关的方法叫做行动方法。
    
      ●  接收者(Receiver)角色:负责具体实施和执行一个请求。任何一个类都可以成为接收者,实施和执行请求的方法叫做行动方法。

    /DesignPatterns/src/com/louis/command/Receiver.java

    /**
     * Project Name:DesignPatterns
     * File Name:Receiver.java
     * Package Name:com.louis.command
     * Date:2017年11月5日下午9:48:44
     * Copyright (c) 2017, 2692613726@qq.com All Rights Reserved.
     *
    */
    
    package com.louis.command;
    /**
     * ClassName:Receiver 
     * Function: TODO ADD FUNCTION. 
     * Reason:     TODO ADD REASON. 
     * Date:     2017年11月5日 下午9:48:44 
     * @author   michael
     * @version  
     * @since    JDK 1.7
     * @see      
     */
    public class Receiver {
        public void action(){
            System.out.println("执行操作");
        }
    
    
    }

    /DesignPatterns/src/com/louis/command/Command.java

    /**
     * Project Name:DesignPatterns
     * File Name:Command.java
     * Package Name:com.louis.command
     * Date:2017年11月5日下午9:50:23
     * Copyright (c) 2017, 2692613726@qq.com All Rights Reserved.
     *
    */
    
    package com.louis.command;
    /**
     * ClassName:Command 
     * Function: TODO ADD FUNCTION. 
     * Reason:     TODO ADD REASON. 
     * Date:     2017年11月5日 下午9:50:23 
     * @author   michael
     * @version  
     * @since    JDK 1.7
     * @see      
     */
    public interface Command {
        //执行方法
        void execute();
    }

    /DesignPatterns/src/com/louis/command/ConcreteCommand.java

    /**
     * Project Name:DesignPatterns
     * File Name:ConcreteCommand.java
     * Package Name:com.louis.command
     * Date:2017年11月5日下午9:51:01
     * Copyright (c) 2017, 2692613726@qq.com All Rights Reserved.
     *
    */
    
    package com.louis.command;
    /**
     * ClassName:ConcreteCommand 
     * Function: TODO ADD FUNCTION. 
     * Reason:     TODO ADD REASON. 
     * Date:     2017年11月5日 下午9:51:01 
     * @author   michael
     * @version  
     * @since    JDK 1.7
     * @see      
     */
    public class ConcreteCommand implements Command {
    
        //持有相应的接收者对象
        private Receiver receiver = null;
        public ConcreteCommand(Receiver receiver){
            this.receiver = receiver;
        }
        @Override
        public void execute() {
            //通常会转调接收者对象的相应方法,让接受者来真正执行功能
            receiver.action();
    
        }
    
    }

    /DesignPatterns/src/com/louis/command/Invoker.java

    /**
     * Project Name:DesignPatterns
     * File Name:Invoker.java
     * Package Name:com.louis.command
     * Date:2017年11月5日下午9:59:08
     * Copyright (c) 2017, 2692613726@qq.com All Rights Reserved.
     *
    */
    
    package com.louis.command;
    /**
     * ClassName:Invoker 
     * Function: TODO ADD FUNCTION. 
     * Reason:     TODO ADD REASON. 
     * Date:     2017年11月5日 下午9:59:08 
     * @author   michael
     * @version  
     * @since    JDK 1.7
     * @see      
     */
    public class Invoker {
        //持有命令对象
        private Command command = null;
        
        //构造方法
        public Invoker(Command command){
            this.command = command;
        }
        //行动方法
        public void action(){
            command.execute();
        }
    }

    /DesignPatterns/src/com/louis/command/Client.java

    /**
     * Project Name:DesignPatterns
     * File Name:Client.java
     * Package Name:com.louis.command
     * Date:2017年11月5日下午10:01:07
     * Copyright (c) 2017, 2692613726@qq.com All Rights Reserved.
     *
    */
    
    package com.louis.command;
    /**
     * ClassName:Client 
     * Function: TODO ADD FUNCTION. 
     * Reason:     TODO ADD REASON. 
     * Date:     2017年11月5日 下午10:01:07 
     * @author   michael
     * @version  
     * @since    JDK 1.7
     * @see      
     */
    public class Client {
        public static void main(String[] args) {
            //创建接收者
            Receiver receiver = new Receiver();
            //创建命令对象,设定它的接受者
            Command command = new ConcreteCommand(receiver);
            //创建请求者,把命令对象设置进去
            Invoker invoker = new Invoker(command);
            //执行方法
            invoker.action();
        }
    }

    AudioPlayer系统

    参考:http://www.cnblogs.com/java-my-life/archive/2012/06/01/2526972.html

    宏命令

    参考:http://www.cnblogs.com/java-my-life/archive/2012/06/01/2526972.html

  • 相关阅读:
    剑指offer-二维数组中的查找
    TF-IDF(term frequency–inverse document frequency)
    Java实现中文字符串的排序功能
    当前课程
    【R】资源整理
    CentOS相关
    【转】Setting up SDL Extension Libraries on MinGW
    【转】Setting up SDL Extension Libraries on Visual Studio 2010 Ultimate
    【转】Setting up SDL Extension Libraries on Code::Blocks 12.11
    【转】Setting up SDL Extension Libraries on Visual Studio 2019 Community
  • 原文地址:https://www.cnblogs.com/Michael2397/p/7789194.html
Copyright © 2011-2022 走看看