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 命令模式设计模式详解 命令模式(Command Pattern)是一种行为设计模式,它允许将请求封装为一个对象,从而使不同的请求可以使用不同的参数进行参数化,队列或日志请求,以及支持可撤销的操作。在 Java 中,...
5. 文件中提到的24种设计模式,涵盖了大多数常用的模式。例如,代理模式(Proxy Pattern)、单例模式(Singleton Pattern)、工厂方法模式(Factory Method Pattern)、抽象工厂模式(Abstract Factory Pattern)、...
### Java常用设计模式—追美眉技术详解 #### 设计模式概述 设计模式是一种软件设计中的通用解决方案,它描述了一类问题以及解决该问题的方法。通过应用这些模式,开发人员可以编写出更易于理解、扩展和维护的代码...
本文将深入探讨五个关键的设计模式:单例模式、工厂方法模式、策略模式、命令模式和桥接模式,这些都是Java编程中常用且至关重要的设计原则。 首先,我们来看**单例模式**。单例模式确保一个类只有一个实例,并提供...
本书还附带了一些基础类库的介绍,例如列表(List)、迭代器(Iterator)、列表迭代器(ListIterator)、点(Point)、矩形(Rect)等,这些都是在实现设计模式时常用的数据结构。 #### 十一、参考文献与索引 **参考文献与...
总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元...
### .NET 23种常用设计模式 #### 概述 设计模式是在软件工程领域内被广泛采用的一种软件设计思路,旨在解决特定类型的问题。在.NET框架中,这些设计模式同样适用并能帮助开发者构建更加灵活、可扩展及易于维护的...
- Vi(Visual Editor)是Linux中最常用的文本编辑器之一,具有全屏幕编辑和命令模式两种操作方式。 - 在命令模式下,你可以通过键入命令来移动光标、删除文本、复制和粘贴等。 - 转换到插入模式(Insert mode),...
首先,vi编辑器主要分为三种模式:命令模式、插入模式和末行模式。在命令模式中,用户可以执行打开、保存、退出、复制、粘贴等命令;在插入模式中,用户可以输入文本;在末行模式中,用户可以执行更复杂的命令,比如...
在软件开发中,特别是面向对象编程语言中,命令模式是一种常用的设计模式,它通过将操作请求转化为一个包含与请求相关的所有信息的对象,从而允许参数化这些操作。这样做的好处是可以轻松地添加新的操作类型,同时...
设计模式的应用不仅限于上述几种,还包括适配器模式、装饰器模式、观察者模式、责任链模式、命令模式、迭代器模式、访问者模式、模板方法模式等。它们都是软件设计的宝贵工具,帮助我们写出更优雅、可复用的代码。...
Java语言是实现这些设计模式的常用平台,因为它提供了丰富的面向对象特性,如封装、继承和多态。通过使用设计模式,Java开发者能够更好地遵循“开闭原则”——对扩展开放,对修改关闭,这意味着在不改变已有代码的...
单例模式是一种常用的创建型设计模式,它保证一个类仅有一个实例,并提供一个全局访问点。单例模式通常用于控制资源的共享访问,例如数据库连接池、日志管理器等。 #### 实现方式 - **构造函数私有化**:防止外部...
本资源包含了2016年6月20日关于Java常用设计模式的源码和作者的心得体会,这对于我们深入理解和应用这些模式具有很大的帮助。 首先,我们要了解设计模式的基本分类。设计模式分为三大类:创建型模式(Creational ...
这三种设计模式都是软件设计中常用的技术,它们有助于提高代码的可扩展性、可维护性和可复用性,同时降低组件间的耦合度。在实际开发中,根据需求选择合适的设计模式,能够帮助构建更加健壮和灵活的系统。
以JAVA为例,汇总了十几种常用的设计模式,包括了:单例模式、工厂模式、建造者模式、适配器模式、装饰器模式、外观模式、命令模式、观察者模式、状态模式、策略模式、模板方法模式等。仅供学习使用。 相关文章请看...
3. **设计模式分类**:常见的设计模式分为三大类:创建型模式(如工厂模式、抽象工厂模式、单例模式等)、结构型模式(如适配器模式、桥接模式、装饰器模式等)和行为型模式(如观察者模式、策略模式、命令模式等)...
### Java常用设计模式详解 #### 一、设计模式概述 设计模式是一种在特定情况下解决软件设计问题的经验总结,它能够帮助开发者在面对相似的问题时快速找到解决方案。设计模式大致可以分为三大类:创建型模式、结构...
【Java常用设计模式详解】 设计模式是软件开发中的一种最佳实践,它提供了在特定场景下解决常见问题的模板。在Java中,设计模式分为三大类:创建型、结构型和行为型模式。以下是对这些模式的详细解释: 1. 创建型...
命令模式 职责链模式 进来者模式 访问者模式 数据结构 Stack - 使用泛型实现Stack 生成斐波那契数列 使用容器 利用迭代器实现原材料 实用程序 StringUtil类 - 封装常用的String方法 基本的 正则表达式的使用方式