`

常用设计模式----命令模式

 
阅读更多
package org.design.patterns;

import java.util.List;

/**
 * 命令模式: 将"请求"封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。 命令模式 也支持undo、redo操作。
 */
// 命令的顶层接口
public interface Command {
 public void execute();
}

// 命令的实现
class CommandImp1 implements Command {

 Receiver receiver;

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

 @Override
 public void execute() {
  receiver.action();
 }
}

// class CommandImp2 implements Command {
// //...
// }

// 命令实际执行者的顶层接口
interface Receiver {
 public void action();
}

// 命令执行者1
class ReceiverImp1 implements Receiver {
 @Override
 public void action() {
  System.out.println("ReciverImp1 actoin!");
 }
}

// 命令执行者2
class ReceiverImp2 implements Receiver {
 @Override
 public void action() {
  System.out.println("ReciverImp2 actoin!");
 }
}

// 调用CommandImp1命令
// new CommandImp1(new ReceiverImp1());
class SimpleControl {
 Command command;

 public SimpleControl() {
 }

 public void setCommand(Command command) {
  this.command = command;
 }

 public void doString() {
  command.execute();
 }
}

// ====================================================
// 支持撤销的命令接口,其实现类也要实现undo操作即可,支持undo,redo操作就是用两个命令栈,
// 在java中栈可以通过LinkedList模拟,这里暂不详述。
interface Command1 {
 void execute();

 void undo();
}

// ======================================================
// 宏命令的实现:就是制造一种新的命令,用来执行其他的一堆命令,而不是一个命令。
class MacroCommand implements Command {
 List<Command> commandList;// 一个命令集合

 public MacroCommand(List<Command> commandList) {
  this.commandList = commandList;
 }

 @Override
 public void execute() {
       for(Command cmd:commandList){
        cmd.execute();
       }
 }
// public void undo();
}
//==========================================================
/*
 * 要点:
 * -命令模式将请求对象和被请求对象解耦
 * -在解耦的两者之间是通过命令对象进行沟通的,命令对象封装了接受者和一组动作
 * 
 * 命令模式的更多用途:队列请求、日志请求。
 *
 *命令可以将运算块打包(一个接受者和一组动作),然后将它传来传去,就像一般的对象一样。
 *即使在命令被创建很久后,运算依然可以被调用。当然也可在不同的线程中被调用。于是可以
 *根据这样的特性将其应用到如 日程安排(Scheduler)、线程池、工作队列等。
 *
 *工作队列;在队列中添加命令,然后在线程从队列中取出命令执行(execute()),调用完成后
 *丢弃该命令,再取出下一个命令 ...,这就实现了工作队列类和实际运算对象的解耦,线程只需调用
 *execute方法,而无需知道该命令的具体实现。
 *
 *日志请求:
 *某些应用(如web服务器)需要将所有的动作记录到日志中,并能在系统死机后,重新调用这些动作
 *恢复到之前的状态。通过在Command中新增两个方法store()/load(),命令模式就能够支持这一点。
 *在Java中,可以利用对象的序列化(Serialization)实现这些方法。
 *
 */
分享到:
评论

相关推荐

    java常用设计模式-命令模式

    Java 命令模式设计模式详解 命令模式(Command Pattern)是一种行为设计模式,它允许将请求封装为一个对象,从而使不同的请求可以使用不同的参数进行参数化,队列或日志请求,以及支持可撤销的操作。在 Java 中,...

    java设计模式---诙谐易懂版

    5. 文件中提到的24种设计模式,涵盖了大多数常用的模式。例如,代理模式(Proxy Pattern)、单例模式(Singleton Pattern)、工厂方法模式(Factory Method Pattern)、抽象工厂模式(Abstract Factory Pattern)、...

    JAVA常用设计模式-追美眉技术详解.doc

    ### Java常用设计模式—追美眉技术详解 #### 设计模式概述 设计模式是一种软件设计中的通用解决方案,它描述了一类问题以及解决该问题的方法。通过应用这些模式,开发人员可以编写出更易于理解、扩展和维护的代码...

    研磨设计模式--chjavach的博客文章

    本文将深入探讨五个关键的设计模式:单例模式、工厂方法模式、策略模式、命令模式和桥接模式,这些都是Java编程中常用且至关重要的设计原则。 首先,我们来看**单例模式**。单例模式确保一个类只有一个实例,并提供...

    GOF-设计模式-Design Patterns-英文原版-高清-有目录-有页码

    本书还附带了一些基础类库的介绍,例如列表(List)、迭代器(Iterator)、列表迭代器(ListIterator)、点(Point)、矩形(Rect)等,这些都是在实现设计模式时常用的数据结构。 #### 十一、参考文献与索引 **参考文献与...

    java常用23中设计模式

    总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元...

    .NET 23种常用设计模式

    ### .NET 23种常用设计模式 #### 概述 设计模式是在软件工程领域内被广泛采用的一种软件设计思路,旨在解决特定类型的问题。在.NET框架中,这些设计模式同样适用并能帮助开发者构建更加灵活、可扩展及易于维护的...

    Linux常用命令-Vi-简单Shell编程.zip_linux常用命令_vi

    - Vi(Visual Editor)是Linux中最常用的文本编辑器之一,具有全屏幕编辑和命令模式两种操作方式。 - 在命令模式下,你可以通过键入命令来移动光标、删除文本、复制和粘贴等。 - 转换到插入模式(Insert mode),...

    vi常用命令汇总-2019-11-05.pdf

    首先,vi编辑器主要分为三种模式:命令模式、插入模式和末行模式。在命令模式中,用户可以执行打开、保存、退出、复制、粘贴等命令;在插入模式中,用户可以输入文本;在末行模式中,用户可以执行更复杂的命令,比如...

    设计模式-COMMAND

    在软件开发中,特别是面向对象编程语言中,命令模式是一种常用的设计模式,它通过将操作请求转化为一个包含与请求相关的所有信息的对象,从而允许参数化这些操作。这样做的好处是可以轻松地添加新的操作类型,同时...

    JAVA常用设计模式.ppt

    设计模式的应用不仅限于上述几种,还包括适配器模式、装饰器模式、观察者模式、责任链模式、命令模式、迭代器模式、访问者模式、模板方法模式等。它们都是软件设计的宝贵工具,帮助我们写出更优雅、可复用的代码。...

    设计模式 - 可复用面向对象软件的基础(高清版).rar

    Java语言是实现这些设计模式的常用平台,因为它提供了丰富的面向对象特性,如封装、继承和多态。通过使用设计模式,Java开发者能够更好地遵循“开闭原则”——对扩展开放,对修改关闭,这意味着在不改变已有代码的...

    几种常用的设计模式介绍总结

    单例模式是一种常用的创建型设计模式,它保证一个类仅有一个实例,并提供一个全局访问点。单例模式通常用于控制资源的共享访问,例如数据库连接池、日志管理器等。 #### 实现方式 - **构造函数私有化**:防止外部...

    java几种常用的设计模式源码和心得

    本资源包含了2016年6月20日关于Java常用设计模式的源码和作者的心得体会,这对于我们深入理解和应用这些模式具有很大的帮助。 首先,我们要了解设计模式的基本分类。设计模式分为三大类:创建型模式(Creational ...

    java设计模式-期末整理.pdf

    这三种设计模式都是软件设计中常用的技术,它们有助于提高代码的可扩展性、可维护性和可复用性,同时降低组件间的耦合度。在实际开发中,根据需求选择合适的设计模式,能够帮助构建更加健壮和灵活的系统。

    Java常用设计模式例子

    以JAVA为例,汇总了十几种常用的设计模式,包括了:单例模式、工厂模式、建造者模式、适配器模式、装饰器模式、外观模式、命令模式、观察者模式、状态模式、策略模式、模板方法模式等。仅供学习使用。 相关文章请看...

    Java与模式---闫宏

    3. **设计模式分类**:常见的设计模式分为三大类:创建型模式(如工厂模式、抽象工厂模式、单例模式等)、结构型模式(如适配器模式、桥接模式、装饰器模式等)和行为型模式(如观察者模式、策略模式、命令模式等)...

    Java常用设计模式 j2ee

    ### Java常用设计模式详解 #### 一、设计模式概述 设计模式是一种在特定情况下解决软件设计问题的经验总结,它能够帮助开发者在面对相似的问题时快速找到解决方案。设计模式大致可以分为三大类:创建型模式、结构...

    JAVA常用设计模式

    【Java常用设计模式详解】 设计模式是软件开发中的一种最佳实践,它提供了在特定场景下解决常见问题的模板。在Java中,设计模式分为三大类:创建型、结构型和行为型模式。以下是对这些模式的详细解释: 1. 创建型...

    【资源免费下载】Java代码积累丨大话设计模式(Java实现版本)、线程协作

    命令模式 职责链模式 进来者模式 访问者模式 数据结构 Stack - 使用泛型实现Stack 生成斐波那契数列 使用容器 利用迭代器实现原材料 实用程序 StringUtil类 - 封装常用的String方法 基本的 正则表达式的使用方式

Global site tag (gtag.js) - Google Analytics