Java之命令模式(Command Pattern)
1.概念
将来自客户端的请求传入一个对象,从而使你可用不同的请求对客户进行参数化。用于“行为请求者”与“行为实现者”解耦,可实现二者之间的松耦合,以便适应变化。分离变化与不变的因素。
在面向对象的程序设计中,一个对象调用另一个对象,一般情况下的调用过程是:创建目标对象实例;设置调用参数;调用目标对象的方法。
但在有些情况下有必要使用一个专门的类对这种调用过程加以封装,我们把这种专门的类称作command类。
Command模式可应用于
a)整个调用过程比较繁杂,或者存在多处这种调用。这时,使用Command类对该调用加以封装,便于功能的再利用。
b)调用前后需要对调用参数进行某些处理。
c)调用前后需要进行某些额外处理,比如日志,缓存,记录历史操作等。
Command模式有如下效果:
a)将调用操作的对象和知道如何实现该操作的对象解耦。
b)Command是头等对象。他们可以像其他对象一样被操作和扩展。
c)你可将多个命令装配成一个符合命令。
d)增加新的Command很容易,因为这无需改变现有的类
package command; //命令 接收者(执行者)播放器 public class Player { public void turnOn(){ System.out.println("打开"); } public void turnOff(){ System.out.println("关闭"); } public void next(){ System.out.println("下一曲"); } }
命令接口:
package command; public interface Command { public void execute(); }
各种命令实现类:
package command; //打开命令类 public class TurnOnCommand implements Command { private Player player; public TurnOnCommand(Player player) { this.player = player; } public void execute() { this.player.turnOn(); } } package command; //关闭命令类 public class TurnOffCommand implements Command { private Player player; public TurnOffCommand(Player player) { this.player = player; } public void execute() { this.player.turnOff(); } } package command; //下一曲命令类 public class NextCommand implements Command { private Player player; public NextCommand(Player player) { this.player = player; } public void execute() { this.player.next(); } }
命令发送者类:
package command; //命令发送类 public class PlayerInvoker { private TurnOnCommand on; private TurnOffCommand off; private NextCommand next; public PlayerInvoker(TurnOnCommand on,TurnOffCommand off,NextCommand next) { this.on = on; this.off = off; this.next = next; } public void turnOn(){ this.on.execute(); } public void turnOff(){ this.off.execute(); } public void next(){ this.next.execute(); } }
客户端测试类:
package command;
//测试类
public class Client{
public static void main(String[] args) {
Player player = new Player();
TurnOnCommand on = new TurnOnCommand(player);
TurnOffCommand off = new TurnOffCommand(player);
NextCommand next = new NextCommand(player);
PlayerInvoker invoker = new PlayerInvoker(on, off, next);
invoker.turnOn();
invoker.turnOff();
invoker.next();
}
}
优点:
降低系统的耦合度
新的命令可以很容易地加入到系统中
可以比较容易地设计一个组合命令
缺点:
使用命令模式可能会导致某些系统有过多的具体命令类。因为针对每一个命令都需要设计一个具体命令类,因此某些系统可能需要大量具体命令类,这将影响命令模式的使用。
适用环境:
系统需要将请求调用者和请求接收者解耦,使得调用者和接收者不直接交互。
系统需要在不同的时间指定请求,将请求排队和执行请求。
系统需要支持命令的撤销和恢复操作。
系统需要将一组操作组合在一起,即支持宏命令。
相关推荐
代理模式(Proxy Pattern)、单例模式(Singleton Pattern)、工厂方法模式...命令模式(Command Pattern)、装饰模式(Decorator Pattern)、迭代器模式(Iterator Pattern)、组合模式(Composite Pattern)、观察者...
包括责任链模式(Chain of Responsibility)、命令模式(Command)、解释器模式(Interpreter)、迭代器模式(Iterator)、中介者模式(Mediator)、备忘录模式(Memento)、观察者模式(Observer)、状态模式...
总结来说,"JAVA design pattern-java设计模式"的CHM文件是深入学习和理解Java设计模式的宝贵资源,通过学习和应用这些模式,开发者可以提高其代码质量,优化系统架构,从而更好地应对复杂的软件开发挑战。
命令模式-Command Pattern 请求发送者与接收者解耦——命令模式(一) 请求发送者与接收者解耦——命令模式(二) 请求发送者与接收者解耦——命令模式(三) 请求发送者与接收者解耦——命令模式(四) 请求发送者...
命令模式(Command Pattern)是一种行为设计模式,它允许将请求封装为一个对象,从而使不同的请求可以使用不同的参数进行参数化,队列或日志请求,以及支持可撤销的操作。在 Java 中,命令模式的实现通常涉及一个...
命令模式(Command Pattern)是一种行为设计模式,它将请求封装为一个对象,使得你可以使用不同的请求、队列请求,或者支持可撤销的操作。在Java中实现命令模式,我们可以利用面向对象编程的特性来构建系统,使得...
13. **命令模式(Command Pattern)**:将请求封装为一个对象,使得可以使用不同的请求、队列请求、记录请求或者支持可撤销的操作。 14. **责任链模式(Chain of Responsibility Pattern)**:避免对象之间的耦合,...
**命令模式(Command Pattern)** 是一种行为设计模式,它将请求封装成对象,从而使你能够用不同的请求对客户端进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。 在软件开发中,特别是面向对象编程语言...
Java设计模式是软件开发中的重要概念,它是一种在特定情境下解决常见问题的经验总结和标准解决方案。设计模式并不直接提供代码实现,而是提供了一种通用的语言,让开发者能够更好地理解和交流复杂的系统架构。这些...
- **命令模式**(Command Pattern) - **迭代器模式**(Iterator Pattern) - **解释器模式**(Interpreter Pattern) - **中介者模式**(Mediator Pattern) - **备忘录模式**(Memento Pattern) - **状态...
命令模式 (Command Pattern) 命令模式是一种行为型模式,将一个请求封装成一个对象,从而使你能够用不同的请求来参数化对象,对请求进行排队或记录日志,以及支持可撤销的操作。命令模式可以将请求的发送者与执行...
这个名为"design-pattern:java设计模式源代码"的压缩包文件很可能是包含了多种Java实现的设计模式示例。 首先,我们来看看主要的设计模式分类: 1. 创建型模式:这类模式涉及到对象的创建,如单例模式(Singleton...
Java设计模式是软件工程中的一种最佳实践,它们是解决常见编程问题的经验总结,可以提高代码的可重用性、可维护性和可扩展性。在"design-pattern.zip"这个压缩包中,我们很可能会找到一系列与Java设计模式相关的代码...
pattern/src/behavior/command //13.6命令模式 pattern/src/behavior/memento //13.7备忘录模式 pattern/src/behavior/state //13.8状态模式 pattern/src/behavior/visitor //13.9访问者模式 pattern/src/...
9. **命令模式**(Command Pattern):将请求封装为一个对象,以便使用不同的请求、队列请求或支持撤销操作。在Java中,常用于事件驱动系统。修改可能涉及增加新的命令或者优化命令的执行流程。 10. **桥接模式**...
- 命令模式(Command):将请求封装为一个对象,以便使用不同的请求、队列或者日志请求,也可以支持可撤销的操作。 - 解释器模式(Interpreter):给定一种语言,定义它的文法表示,并提供一个解释器来处理该语言...
《Java设计模式之禅》是一本深入浅出讲解设计模式的书籍,书中不仅包含23种经典设计模式的案例,还详细介绍了设计模式背后的思想和原则,适合初学者以及对设计模式有一定了解的程序员阅读。本书旨在帮助读者理解如何...
总结来说,"JAVA 23种设计模式(全).Design Pattern_Java模式"这份资源是学习和掌握Java设计模式的重要工具。通过深入学习并熟练应用这些模式,开发者可以写出更高效、更易于维护的代码,同时提升个人的编程技能和...