设计模式----行为型模式之命令模式(Command Pattern)

  下面来自head first设计模式的命令模式一章节。

  • 定义

  将"请求"封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。

  • 类图

  

  注:

    1、Client:该类主要创建concreteCommand类,并设置其接收者Recevier;

    2、Receiver:该类为接收者类,该类主要是负责接收命令,和执行命令;

    3、Command:该类为 所有命令的抽象类或或接口,该类具备抽象方法execute/undo方法;

    4、Invoker:该类为调用者,该调用者内部持有一个命令对象,调用者在特定时间可以调用内部方法来执行命令对象的execute/undo方;

    5、ConcreteCommand:该类为Command抽象的实现,该类定义了动作与接受者之间的绑定关系

  维基和书上的例子应用结合:

  

/**
 * Invoker 调用者
 * @author mjs
 * @version 1.0.0
 * @filename Switch.java
 * @time 2017-6-26 下午4:38:31
 * @copyright(C) 2017 **********有限公司
 */
package command;

public class Switch {
    private Command command;
    public Switch(){
    }
    /**
     * 持有命令对象初始化
     * @param cmd
     */
    public void setComman(Command cmd){
        this.command = cmd;
    }
    /**
     * 执行命令
     */
    public void execute(){
        command.execute();
    }
}
/**
 * 所有命令的抽象接口
 * @author mjs
 * @version 1.0.0
 * @filename Command.java
 * @time 2017-6-16 下午4:51:30
 * @copyright(C) 2017 **********有限公司
 */
package command;

public interface Command {
    void execute();
}
/**
 * 开灯命令
 * @author mjs
 * @version 1.0.0
 * @filename FlipUpCommand.java
 * @time 2017-6-26 下午4:45:45
 * @copyright(C) 2017 **********有限公司
 */
package command;

public class FlipUpCommand implements Command {
    private Light light;
    public FlipUpCommand(Light light){
        this.light = light;
    }
    public void execute() {
        light.turnOn();
    }

}
/**
 * 关灯命令
 * @author mjs
 * @version 1.0.0
 * @filename FlipDownCommand.java
 * @time 2017-6-26 下午5:12:28
 * @copyright(C) 2017 **********有限公司
 */
package command;

public class FlipDownCommand implements Command {
    private Light light;
    public FlipDownCommand(Light light){
        this.light = light;
    }
    public void execute() {
        light.turnOff();
    }

}
/**
 * Receiver 灯(命令的接收者)
 * @author mjs
 * @version 1.0.0
 * @filename Light.java
 * @time 2017-6-26 下午4:47:00
 * @copyright(C) 2017 **********有限公司
 */
package command;

public class Light {
    public Light() {
    }
    /**
     * 开灯
     */
    public void turnOn(){
        System.out.println("The light is on");
    }
    /**
     * 关灯
     */
    public void turnOff(){
        System.out.println("The light is off");
    }

}
/**
 * TODO
 * @author mjs
 * @version 1.0.0
 * @filename Client.java
 * @time 2017-6-26 下午5:18:47
 * @copyright(C) 2017 **********有限公司
 */
package command;

public class Client {
    public static void main(String[] args) {
        //创建concreteCommand类,并设置其接收者Recevier
        Command switchUp = new FlipUpCommand(new Light());
        //创建调用者Invoker
        Switch lightSwitch = new Switch();
        lightSwitch.setComman(switchUp);
        //执行命令对象动作
        lightSwitch.execute();
        /**
         * 输出:
         *     The light is on
         */
    }
}

  例子比较简单,调用者方可以使用list数组形式存储多个命令,客户端利用控制台输入来执行更多操作。

  上面内容主要来自head first设计模式书中。

  

  

  

  

   

时间: 2024-12-13 03:57:36

设计模式----行为型模式之命令模式(Command Pattern)的相关文章

Java进阶篇设计模式之八 ----- 责任链模式和命令模式

前言 在上一篇中我们学习了结构型模式的享元模式和代理模式.本篇则来学习下行为型模式的两个模式, 责任链模式(Chain of Responsibility Pattern)和命令模式(Command Pattern). 责任链模式 简介 责任链模式顾名思义,就是为请求创建了一个接收者对象的链.这种模式给予请求的类型,对请求的发送者和接收者进行解耦.这种类型的设计模式属于行为型模式.在这种模式中,通常每个接收者都包含对另一个接收者的引用.如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接

Java设计模式之八 ----- 责任链模式和命令模式

前言 在上一篇中我们学习了结构型模式的享元模式和代理模式.本篇则来学习下行为型模式的两个模式, 责任链模式(Chain of Responsibility Pattern)和命令模式(Command Pattern). 责任链模式 简介 责任链模式顾名思义,就是为请求创建了一个接收者对象的链.这种模式给予请求的类型,对请求的发送者和接收者进行解耦.这种类型的设计模式属于行为型模式.在这种模式中,通常每个接收者都包含对另一个接收者的引用.如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接

行为型模式:命令模式

LieBrother原文: 行为型模式:命令模式 十一大行为型模式之三:命令模式. 简介 姓名 :命令模式 英文名 :Command Pattern 价值观 :军令如山 个人介绍 : Encapsulate a request as an object,thereby letting you parameterize clients with different requests,queue or log requests,and support undoable operations. 将一个

IOS设计模式之四(备忘录模式,命令模式)

本文原文请见:http://www.raywenderlich.com/46988/ios-design-patterns. 由 @krq_tiger(http://weibo.com/xmuzyq)翻译,如果你发现有什么错误,请与我联系谢谢. 备忘录(Memento)模式 备忘录模式快照对象的内部状态并将其保存到外部.换句话说,它将状态保存到某处,过会你可以不破坏封装的情况下恢复对象的状态,也就是说原来对象中的私有数据仍然是私有的. 如何使用备忘录模式 在ViewController.m中增加

设计模式(七):命令模式

一.概述 命令模式将“请求”封装成对象,以便使用不同的请求.队列或者日志来参数化其他对象.命令模式也支持可撤销的操作. 二.解决问题 假设我们买了一套智能家电,有照明灯.风扇.冰箱.洗衣机,我们只要在手机上安装app就可以控制对这些家电工作.那么问题来了,这些智能家电来自不同的厂家,我们是不是要对每个厂家的家电都安装一个app呢?毫无疑问,我们肯定不想安装那么多的app,我们希望只要一个app就可以控制全部智能家电.要实现一个app控制所有智能家电的需要,每个智能家电厂家都要提供一个统一的接口给

设计模式第17篇:命令模式

一.命令模式介绍 命令模式是一种对象行为型模式,其别名为动作(Action)模式或事务(Transaction)模式.命令模式的本质是对请求进行封装,一个请求对应于一个命令,每一个命令都是一个操作:请求的一方发出请求要求执行一个操作:接收的一方收到请求,并执行相应的操作.命令模式允许请求的一方和接收的一方独立开来,使得请求的一方不必知道接收请求的一方的接口,更不必知道请求如何被接收.操作是否被执行.何时被执行,以及是怎么被执行的.        命令模式的关键在于引入了抽象命令类,请求发送者针对

设计模式(一):命令模式(1)——基本的命令模式

前言 命令模式的讲解分为四篇: 设计模式(一):命令模式(1)——基本的命令模式 设计模式(一):命令模式(2)——命令模式扩展之宏命令 设计模式(一):命令模式(3)——命令模式扩展之队列请求 设计模式(一):命令模式(4)——命令模式扩展之日志请求 一.生活中的命令模式 1.案例 如果将命令模式反映到生活中,遥控器无疑是一个很好的例子.假如我们有如下一个遥控器 这个遥控器有三个插槽(编号为0,1,2),每个插槽对应着要操作的一个电器,插槽所控制的电器这里设置的分别是卧室灯.空调.冰箱,这些电

设计模式(一):命令模式(2)——命令模式扩展之宏命令

前言 命令模式的讲解分为四篇: 设计模式(一):命令模式(1)——基本的命令模式 设计模式(一):命令模式(2)——命令模式扩展之宏命令 设计模式(一):命令模式(3)——命令模式扩展之队列请求 设计模式(一):命令模式(4)——命令模式扩展之日志请求 一.升级遥控器 1.需求 经过上一节的设计,我们的遥控器每个按键都具备了基本的开关功能,还有一个按键具备了撤销功能.但人类都是懒惰的,现在我们想要按下0号插槽的On按钮时就可以将电灯.空调.洗衣机打开,按下0号插槽的Off按钮时就可以将电灯.空调

设计模式(一):命令模式(4)——命令模式扩展之日志请求

前言 命令模式的讲解分为四篇: 设计模式(一):命令模式(1)——基本的命令模式 设计模式(一):命令模式(2)——命令模式扩展之宏命令 设计模式(一):命令模式(3)——命令模式扩展之队列请求 设计模式(一):命令模式(4)——命令模式扩展之日志请求 一.命令模式扩展之日志请求 1.日志请求的工作方式 上一节介绍了命令模式之队列请求,本节介绍一下另一个扩展——日志请求.某些用用需要将我们所有的动作都记录在日志中,并能在系统死机之后,重新调用这些动作恢复到之前的状态.命令模式能够支持这一点.这些

设计模式(一):命令模式(3)——命令模式扩展之队列请求

前言 命令模式的讲解分为四篇: 设计模式(一):命令模式(1)——基本的命令模式 设计模式(一):命令模式(2)——命令模式扩展之宏命令 设计模式(一):命令模式(3)——命令模式扩展之队列请求 设计模式(一):命令模式(4)——命令模式扩展之日志请求 一.命令模式扩展——队列请求 1.队列请求的工作方式 上一篇说了命令模式的扩展之宏命令,本节讲解一下命令模式的第二个扩展队列请求.因为命令可以将运算块打包(一个接收者和一组动作),然后将它传来传去,就像是一般的对象一样.现在,即使命令被创建许久之