【设计模式】—— 命令模式Commond

  前言:【模式总览】——————————by xingoo

  模式意图

  将一个请求封装成一个对象,从而对这个命令执行撤销、重做等操作。

  典型的Eclipse开发中,编辑器的操作就需要用到这个模式,比如Undo、Redo等等。

  另外这个模式使得一个命令的触发与接收解耦,这样我们就可以演变成把感兴趣的对象接收这个命令,当命令触发时,这些对象就会执行操作。这个机制也是java事件的处理方式。

  应用场景

  1 命令抽象成对象

  2 在不同的时刻,指定或者排队命令

  3 支持 Undo或者Redo等操作

  4 修改日志,当系统崩溃时,利用修改日志执行撤销

  5 原语操作上构造一个高层系统(不理解)

  模式结构

  Invoker 命令的触发者,触发一个命令的执行。

/**
 * 命令的触发者,发送命令
 * @author xingoo
 *
 */
class Invoker{
    private Commond commond;

    public Invoker(Commond commond) {
        this.commond = commond;
    }

    public void action(){
        commond.excute();
    }
}

  Receiver 命令的接受者,针对命令,执行一定的操作。

/**
 * 命令的接受者,负责接收命令,进行处理
 * @author xingoo
 *
 */
class Receiver{

    public Receiver() {

    }

    public void action(){
        System.out.println("Action of receiver!");
    }
}

  Commond 命令的抽象接口

/**
 * 命令接口,定义命令的统一接口
 * @author xingoo
 *
 */
interface Commond{
    public void excute();
}

  ConcreteCommond 具体的命令,关联一个接收者对象,当命令执行时,执行这个接收者对应的操作。

/**
 * 具体的命令
 * @author xingoo
 *
 */
class ConcreteCommond implements Commond{

    private Receiver receiver;

    public ConcreteCommond(Receiver receiver) {
        this.receiver = receiver;
    }

    public void excute() {
        receiver.action();
    }

}

  全部代码

 1 package com.xingoo.Commond;
 2 /**
 3  * 命令的触发者,发送命令
 4  * @author xingoo
 5  *
 6  */
 7 class Invoker{
 8     private Commond commond;
 9
10     public Invoker(Commond commond) {
11         this.commond = commond;
12     }
13
14     public void action(){
15         commond.excute();
16     }
17 }
18 /**
19  * 命令的接受者,负责接收命令,进行处理
20  * @author xingoo
21  *
22  */
23 class Receiver{
24
25     public Receiver() {
26
27     }
28
29     public void action(){
30         System.out.println("Action of receiver!");
31     }
32 }
33 /**
34  * 命令接口,定义命令的统一接口
35  * @author xingoo
36  *
37  */
38 interface Commond{
39     public void excute();
40 }
41 /**
42  * 具体的命令
43  * @author xingoo
44  *
45  */
46 class ConcreteCommond implements Commond{
47
48     private Receiver receiver;
49
50     public ConcreteCommond(Receiver receiver) {
51         this.receiver = receiver;
52     }
53
54     public void excute() {
55         receiver.action();
56     }
57
58 }
59 /**
60  * 客户端调用者
61  * @author xingoo
62  *
63  */
64 public class Client {
65     public static void main(String[] args) {
66         Receiver receiver = new Receiver();
67         Commond commond = new ConcreteCommond(receiver);
68         System.out.println("Commond register in here!");
69
70         try {
71             Thread.sleep(3000);
72         } catch (InterruptedException e) {
73             // TODO Auto-generated catch block
74             e.printStackTrace();
75         }
76
77         System.out.println("Commond excute in here!");
78         Invoker invoker = new Invoker(commond);
79         invoker.action();
80     }
81 }

  运行结果

Commond register in here!
Commond excute in here!
Action of receiver!
时间: 2024-10-10 01:04:28

【设计模式】—— 命令模式Commond的相关文章

设计模式 - 命令模式(command pattern) 具体解释

命令模式(command pattern) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy 命令模式(command pattern) : 将请求封装成对象, 以便使用不同的请求\队列\日志来參数化其它对象. 命令模式也能够支持撤销操作. 简单的命令模式的实现: 1. 详细的类, 每个类都有特定的方法: /** * @time 2014年6月9日 */ package command; /** * @author C.L.Wang * */ publ

设计模式 - 命令模式(command pattern) 详解

命令模式(command pattern) 详解 本文地址: http://blog.csdn.net/caroline_wendy 命令模式: 将请求封装成对象, 以便使用不同的请求\队列\日志来参数化其他对象. 命令模式也支持可撤销操作. 命令模式: 调用者(Invoker); 命令(Command): 可执行方法(execute), 具体命令(Concrete Command); 接受者(Receiver): 调用命令(Set Command); 具体方法: 1. 具体对象. /** *

设计模式 - 命令模式(command pattern) 多命令 详解

命令模式(command pattern) 多命令 详解 本文地址: http://blog.csdn.net/caroline_wendy 参考命令模式: http://blog.csdn.net/caroline_wendy/article/details/31379977 具体步骤: 1. 多命令, 把未使用的命令, 初始化为空对象(NoCommand), 根据参数(slot), 选择输出命令. /** * @time 2014年6月16日 */ package command; /**

设计模式 - 命令模式(command pattern) 撤销(undo) 详解

命令模式(command pattern) 撤销(undo) 详解 本文地址: http://blog.csdn.net/caroline_wendy 参考命令模式: http://blog.csdn.net/caroline_wendy/article/details/31379977 命令模式可以用于执行撤销(undo)操作. 具体方法: 1. 对象类中需要保存状态, 如level. package command; public class CeilingFan { String loca

设计模式 - 命令模式(command pattern) 宏命令(macro command) 详解

命令模式(command pattern) 宏命令(macro command) 详解 本文地址: http://blog.csdn.net/caroline_wendy 参考: 命名模式(撤销): http://blog.csdn.net/caroline_wendy/article/details/31419101 命令模式可以执行宏命令(macro command), 即多个命令的组合操作. 具体方法:  1. 其余代码与命令(撤销)一致 2. 添加宏命令(macro command),

设计模式--命令模式(Command)

基本概念: Command模式也叫命令模式 ,是行为设计模式的一种.Command模式通过被称为Command的类封装了对目标对象的调用行为以及调用参数,命令模式将方法调用给封装起来了. 命令模式的几个角色: Command: 抽象命令类 ConcreteCommand: 具体命令类 Invoker: 调用者 Receiver: 接收者 Client:客户类 命令模式的优缺点: 优点 1. 降低了系统耦合度 2. 新的命令可以很容易添加到系统中去. 缺点 使用命令模式可能会导致某些系统有过多的具

读书笔记之设计模式-命令模式

行为型:Command(命令模式) 命令模式: 目的:其实一般设计模式就是为了解耦.也没什么特别的,命令模式实际上就是将命令的请求者和命令的执行者解耦. 白话:领导说了,让把这个月的项目计划压缩到三个礼拜完成,还说了:"不管你用什么办法".这句“不管你用什么办法”就是我们所说的解耦.我不需要关心你怎么去做,我只要你能实现我想达到的目的. 模式结构:一般包含下面几个部分. Client:客户 Invoker:命令触发者 Command:命令 ConcreteCommand:具体命令实现

PHP设计模式——命令模式

声明:本系列博客参考资料<大话设计模式>,作者程杰. 命令模式:在软件系统中,"行为请求者"与"行为实现者"通常呈现一种"紧耦合".但在某些场合,比如要对行为进行"记录.撤销/重做.事务"等处理,这种无法抵御变化的紧耦合是不合适的.在这种情况下,如何将"行为请求者"与"行为实现者"解耦?将一组行为抽象为对象,实现二者之间的松耦合.这就是命令模式. 类图: 角色分析: 抽象命令

设计模式-命令模式(Go语言描述)

在上一篇博客设计模式-单例模式(Go语言描述)中我们介绍了在golang中如何去实现单例模式,在文章的最后我们也介绍到了golang独有的一种实现单例的方式-sync.Once.Do(),可以让golang轻松的实现可以应对并发请求的单利.今天我们继续探索设计模式,来介绍一下命令模式的实现. 说起命令,大家第一反应可能就是我们平时敲的各种命令,啪啪啪几行命令下去就可以完成一些功能,在看到命令模式这个词后,可能大家也会和我一样认为这里的命令就是执行一些简单任务的功能,然而并不是,这里的命令更多的像

[设计模式] 命令模式 Command

Command 模式通过将请求封装到一个对象(Command)中,并将请求的接受者存放到具体的 ConcreteCommand 类中(Receiver)中,从而实现调用操作的对象和操作的具体实现者之间的解耦. 在GOF的<设计模式:可复用面向对象软件的基础>一书中对命令模式是这样说的:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化:对请求排队或记录请求日志,以及支持可撤销的操作.在OOP中,一切都是对象,将请求封装成对象,符合OOP的设计思想,当将客户的单个请求封装成对象以后