`

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

阅读更多

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();
}
}

优点:
降低系统的耦合度
新的命令可以很容易地加入到系统中
可以比较容易地设计一个组合命令

缺点:
使用命令模式可能会导致某些系统有过多的具体命令类。因为针对每一个命令都需要设计一个具体命令类,因此某些系统可能需要大量具体命令类,这将影响命令模式的使用。

适用环境:
系统需要将请求调用者和请求接收者解耦,使得调用者和接收者不直接交互。
系统需要在不同的时间指定请求,将请求排队和执行请求。
系统需要支持命令的撤销和恢复操作。
系统需要将一组操作组合在一起,即支持宏命令。

分享到:
评论

相关推荐

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

    代理模式(Proxy Pattern)、单例模式(Singleton Pattern)、工厂方法模式...命令模式(Command Pattern)、装饰模式(Decorator Pattern)、迭代器模式(Iterator Pattern)、组合模式(Composite Pattern)、观察者...

    JAVA设计模式-chm版

    包括责任链模式(Chain of Responsibility)、命令模式(Command)、解释器模式(Interpreter)、迭代器模式(Iterator)、中介者模式(Mediator)、备忘录模式(Memento)、观察者模式(Observer)、状态模式...

    JAVA design pattern-java设计模式

    总结来说,"JAVA design pattern-java设计模式"的CHM文件是深入学习和理解Java设计模式的宝贵资源,通过学习和应用这些模式,开发者可以提高其代码质量,优化系统架构,从而更好地应对复杂的软件开发挑战。

    design-pattern-java.pdf

    命令模式-Command Pattern 请求发送者与接收者解耦——命令模式(一) 请求发送者与接收者解耦——命令模式(二) 请求发送者与接收者解耦——命令模式(三) 请求发送者与接收者解耦——命令模式(四) 请求发送者...

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

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

    命令模式command pattern

    命令模式(Command Pattern)是一种行为设计模式,它将请求封装为一个对象,使得你可以使用不同的请求、队列请求,或者支持可撤销的操作。在Java中实现命令模式,我们可以利用面向对象编程的特性来构建系统,使得...

    java-design-patterns-master_JAVAdesignpattens_java_design_

    13. **命令模式(Command Pattern)**:将请求封装为一个对象,使得可以使用不同的请求、队列请求、记录请求或者支持可撤销的操作。 14. **责任链模式(Chain of Responsibility Pattern)**:避免对象之间的耦合,...

    设计模式-COMMAND

    **命令模式(Command Pattern)** 是一种行为设计模式,它将请求封装成对象,从而使你能够用不同的请求对客户端进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。 在软件开发中,特别是面向对象编程语言...

    design-pattern-Java设计模式

    Java设计模式是软件开发中的重要概念,它是一种在特定情境下解决常见问题的经验总结和标准解决方案。设计模式并不直接提供代码实现,而是提供了一种通用的语言,让开发者能够更好地理解和交流复杂的系统架构。这些...

    Java设计模式(第二版)中文版

    - **命令模式**(Command Pattern) - **迭代器模式**(Iterator Pattern) - **解释器模式**(Interpreter Pattern) - **中介者模式**(Mediator Pattern) - **备忘录模式**(Memento Pattern) - **状态...

    java设计模式ppt

    命令模式 (Command Pattern) 命令模式是一种行为型模式,将一个请求封装成一个对象,从而使你能够用不同的请求来参数化对象,对请求进行排队或记录日志,以及支持可撤销的操作。命令模式可以将请求的发送者与执行...

    设计模式java源码-design-pattern:java设计模式源代码

    这个名为"design-pattern:java设计模式源代码"的压缩包文件很可能是包含了多种Java实现的设计模式示例。 首先,我们来看看主要的设计模式分类: 1. 创建型模式:这类模式涉及到对象的创建,如单例模式(Singleton...

    这是一套 Java 设计模式的集合示例-design-pattern.zip

    Java设计模式是软件工程中的一种最佳实践,它们是解决常见编程问题的经验总结,可以提高代码的可重用性、可维护性和可扩展性。在"design-pattern.zip"这个压缩包中,我们很可能会找到一系列与Java设计模式相关的代码...

    Java高手真经 - Java Web系统设计与架构 源代码(一)设计模式

    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/...

    Java与模式-我修改过的源代码

    9. **命令模式**(Command Pattern):将请求封装为一个对象,以便使用不同的请求、队列请求或支持撤销操作。在Java中,常用于事件驱动系统。修改可能涉及增加新的命令或者优化命令的执行流程。 10. **桥接模式**...

    设计模式整理代码-pattern.zip

    - 命令模式(Command):将请求封装为一个对象,以便使用不同的请求、队列或者日志请求,也可以支持可撤销的操作。 - 解释器模式(Interpreter):给定一种语言,定义它的文法表示,并提供一个解释器来处理该语言...

    Java设计模式之禅

    《Java设计模式之禅》是一本深入浅出讲解设计模式的书籍,书中不仅包含23种经典设计模式的案例,还详细介绍了设计模式背后的思想和原则,适合初学者以及对设计模式有一定了解的程序员阅读。本书旨在帮助读者理解如何...

    JAVA 23种设计模式(全).Design Pattern_Java模式

    总结来说,"JAVA 23种设计模式(全).Design Pattern_Java模式"这份资源是学习和掌握Java设计模式的重要工具。通过深入学习并熟练应用这些模式,开发者可以写出更高效、更易于维护的代码,同时提升个人的编程技能和...

Global site tag (gtag.js) - Google Analytics