`

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

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

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

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

分享到:
评论

相关推荐

    design-pattern-java.pdf

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

    33种JAVA设计模式DEMO

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

    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实现23种设计模式

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

    Java24种设计模式,Java24种设计模式,24种设计模式,学会了这24种设计模式,可以打遍天下无敌手,设计模式非常重要

    12、命令模式COMMAND PATTERN 13、装饰模式DECORATOR PATTERN 14、迭代器模式ITERATOR PATTERN 15、组合模式COMPOSITE PATTERN 16、观察者模式OBSERVER PATTERN 17、责任链模式 18、访问者模式VISITOR PATTERN ...

    Design-pattern-Adapter-Factory-Command-Memento:Java中的Adapter&Factory&Command&Memento设计模式

    设计模式-适配器-工厂-命令-备忘录Java中的Adapter&Factory&Command&Memento设计模式GoodHealth Fitness Corporation 是一家大型健身俱乐部。 它提供最先进的设备供其成员使用。 公司维护一个会员系统,用于记录会员...

    CoreJava-DesignPattern

    CoreJava-DesignPattern 创意设计模式 -- Abstract Factory - Done -- Builder - Done -- Factory Method -- Object Pool -- Prototype - Done -- Singleton - Done 结构设计模式 -- Adapter -- Bridge -- ...

    JAVA设计模式.rar

    策略模式【STRATEGY PATTERN】 代理模式【PROXY PATTERN】 ...命令模式【COMMAND PATTERN】  装饰模式【DECORATOR PATTERN】 迭代器模式【ITERATOR PATTERN】  组合模式【COMPOSITE PATTERN】 ......

    java 设计模式

    java 设计模式 bridge CommandPattern factoryMethod simpleFactory

    Java设计模式学习教程与案例源码.zip

    7. [命令模式](worthed/OriginBlog/blob/master/articles/CommandPattern.md) 8. [职责链模式](worthed/OriginBlog/blob/master/articles/ChainOfResponsibilityPattern.md) 9. [解释器模式](worthed/OriginBlog/...

    java源码解读-DesignPattern:Android源码设计模式解析与实战读书笔记源代码

    包名command_pattern表示的是命令模式的简单例子 包名decorator_pattern.example_one表示的是装饰模式的简单例子1 包名decorator_pattern.example_2表示的是装饰模式的简单例子2(人穿什么衣服的例子,比较直观的...

    23种设计模式的java实现源码

    23种设计模式的java实现源码 此目录里包括了一书中所有23种设计模式的实现(Java 版)源码 关于代码的几点说明: 1. 代码为根据个人对Design Pattern的学习理解写出(>90%原创), 难免有错误的地方,希望...

    java高手真经 (UML建模+设计模式+面向服务架构) 卷6

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

    java 设计模式资料

    附件中是java实现全部的设计模式,包含代码和工程(jbuilder工程),值得收藏. 此目录里包括了一书中所有23种设计模式的实现(Java 版)源码 关于代码的几点说明: 1. 代码为根据个人对Design Pattern的学习理解写...

    Object-Oriented-Analysis-Design:面向对象的分析和设计(JAVA语言)设计模式,Java GUI

    >观察者设计模式PART3->装饰器设计模式HW02: PART1->单例设计模式PART2->迭代器设计模式PART3->状态和观察者模式PART4->代理设计模式中期: PART1->抽象工厂设计模式PART2->适配器设计模式PART3->命令设计模式PART4...

    深入浅出设计模式(中文版电子版)

    5.2CommandPattern(命令模式) 179 5.2.1定义 179 5.2.2现实中的实例——餐馆订菜 180 5.2.3C#实例——简单计算器 181 5.2.4Java实例——总开关 185 5.2.5优势和缺陷 189 5.2.6应用情景 189 5.3Interpreter...

    java高手真经 (UML建模+设计模式+面向服务架构) 卷8

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

    设计模式_命令模式.zip

    命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。 ...

    深入浅出设计模式(中文版)

    5.2CommandPattern(命令模式) 179 5.2.1定义 179 5.2.2现实中的实例——餐馆订菜 180 5.2.3C#实例——简单计算器 181 5.2.4Java实例——总开关 185 5.2.5优势和缺陷 189 5.2.6应用情景 189 5.3Interpreter...

    java高手真经 (UML建模+设计模式+面向服务架构) 卷3

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

Global site tag (gtag.js) - Google Analytics