- 浏览: 365522 次
- 性别:
- 来自: Alien
文章分类
最新评论
-
风一样的男人__:
[flash=200,200][url]引用[/url][/f ...
java线程内存模型,线程、工作内存、主内存 -
极乐君:
厉害了,,,请问可以转载到我们专栏吗?会注明来源和地址的~专栏 ...
java线程内存模型,线程、工作内存、主内存 -
zdd001:
Spring 线程池使用 -
zdd001:
Spring 线程池使用 -
u014663756:
看了三行就知道是我想要的!!
java线程内存模型,线程、工作内存、主内存
1.概念
其实命令模式像很多设计模式一样——通过在你的请求和处理之间加上了一个中间人的角色,来达到分离耦合的目的。通过对中间人角色的特殊设计来形成不同的模式。当然命令模式就是一种特殊设计的结果。
看下命令模式是有哪些角色来组成的吧。
1) 命令角色(Command):声明执行操作的接口。有java接口或者抽象类来实现。
2) 具体命令角色(Concrete Command):将一个接收者对象绑定于一个动作;调用接收者相应的操作,以实现命令角色声明的执行操作的接口。
3) 客户角色(Client):创建一个具体命令对象(并可以设定它的接收者)。
4) 请求者角色(Invoker):调用命令对象执行这个请求。
5) 接收者角色(Receiver):知道如何实施与执行一个请求相关的操作。任何类都可能作为一个接收者。
Command模式可应用于
a)整个调用过程比较繁杂,或者存在多处这种调用。这时,使用Command类对该调用加以封装,便于功能的再利用。
b)调用前后需要对调用参数进行某些处理。
c)调用前后需要进行某些额外处理,比如日志,缓存,记录历史操作等。
Command模式有如下效果:
a)将调用操作的对象和知道如何实现该操作的对象解耦。
b)Command是头等对象。他们可以像其他对象一样被操作和扩展。
c)你可将多个命令装配成一个符合命令。
d)增加新的Command很容易,因为这无需改变现有的类。
2.UML
3.代码
public interface Command {
public void execute();
}
public class ConcreteCommand implements Command {
private Receiver receiver = null;
private String state;
public ConcreteCommand(Receiver receiver){
this.receiver = receiver;
}
public void execute() {
receiver.action();
}
}
public class Receiver {
public void action(){
//真正执行命令操作的功能代码
}
}
public class Invoker {
private Command command = null;
public void setCommand(Command command) {
this.command = command;
}
public void runCommand() {
command.execute();
}
}
public class Client {
public void assemble(){
//创建接收者
Receiver receiver = new Receiver();
//创建命令对象,设定它的接收者
Command command = new ConcreteCommand(receiver);
//创建Invoker,把命令对象设置进去
Invoker invoker = new Invoker();
invoker.setCommand(command);
}
}
下面给个例子,是模拟对电视机的操作有开机、关机、换台命令。代码如下
//命令接收者
public class Tv {
public int currentChannel = 0;
public void turnOn() {
System.out.println("The televisino is on.");
}
public void turnOff() {
System.out.println("The television is off.");
}
public void changeChannel(int channel) {
this.currentChannel = channel;
System.out.println("Now TV channel is " + channel);
}
}
//执行命令的接口
public interface Command {
void execute();
}
//开机命令
public class CommandOn implements Command {
private Tv myTv;
public CommandOn(Tv tv) {
myTv = tv;
}
public void execute() {
myTv.turnOn();
}
}
//关机命令
public class CommandOff implements Command {
private Tv myTv;
public CommandOff(Tv tv) {
myTv = tv;
}
public void execute() {
myTv.turnOff();
}
}
//频道切换命令
public class CommandChange implements Command {
private Tv myTv;
private int channel;
public CommandChange(Tv tv, int channel) {
myTv = tv;
this.channel = channel;
}
public void execute() {
myTv.changeChannel(channel);
}
}
//可以看作是遥控器吧
public class Control {
private Command onCommand, offCommand, changeChannel;
public Control(Command on, Command off, Command channel) {
onCommand = on;
offCommand = off;
changeChannel = channel;
}
public void turnOn() {
onCommand.execute();
}
public void turnOff() {
offCommand.execute();
}
public void changeChannel() {
changeChannel.execute();
}
}
//测试类
public class Client {
public static void main(String[] args) {
// 命令接收者
Tv myTv = new Tv();
// 开机命令
CommandOn on = new CommandOn(myTv);
// 关机命令
CommandOff off = new CommandOff(myTv);
// 频道切换命令
CommandChange channel = new CommandChange(myTv, 2);
// 命令控制对象
Control control = new Control(on, off, channel);
// 开机
control.turnOn();
// 切换频道
control.changeChannel();
// 关机
control.turnOff();
}
}
执行结果为:
The televisino is on.
Now TV channel is 2
The television is off.
发表评论
-
模板模式
2012-11-27 01:14 1053我们在看spring中有部分说到持久层,其中有个类Jdb ... -
访问者模式
2012-11-22 02:59 857访问者模式,顾名思义使用了这个模式后就可以在不修改 ... -
门面模式
2012-11-20 01:06 813外部与一个子系统的通信必须通过一个统一的门面(Facade)对 ... -
追MM与设计模式
2012-11-13 16:40 812创建型模式 1、FACT ... -
职责链模式
2012-10-24 16:13 968职责链模式:使多个对象都有机会处理请求,从而避免请求的发 ... -
享元模式
2012-10-24 15:06 814享元模式是对象的结构模式。享元模式以共享的方式高效地支持大量的 ... -
桥梁模式
2012-10-23 08:51 1177桥梁模式的用意是把抽象化与实现化脱耦。脱耦是说把抽象和实 ... -
组合模式
2012-10-23 10:07 952组合模式将对象以树形结构组织起来,以达成“部分-整体”的层次结 ... -
适配器模式
2012-10-23 10:46 841把一个类的接口变换成 ... -
原型模式。
2012-10-23 15:06 773创建型模式中还有一种与工厂方法模式完全不同的模式,就是原型 ... -
外观模式
2012-10-24 11:24 983比如在玩“极品飞车”这款游戏,你只需要等待的就是倒计时 ... -
代理模式和动态代理
2012-10-24 11:24 964所谓代理,是指具有与代理元(被代理的对象)具有相同的接口的类, ... -
策略模式
2012-10-22 11:00 1022一.策略模式是对象的行为模式,用意是对一组算法的封装。动 ... -
装饰模式
2012-10-22 10:51 894装饰模式:给一个类添加一些额外的职责,并且在添加这些额外 ... -
java设计模式笔记(菜鸟篇)
2012-10-22 10:36 1141设计模式的分类:分布式编程模式,用户界面模式,数据模型模式三大 ... -
java 建造者模式
2012-10-22 10:19 971java 建造者模式 建造模式的角色:1: ... -
单例模式
2012-10-22 09:56 938public class SingleTon(){ ... -
工厂方法模式与抽象工厂模式
2012-10-17 16:23 1018总结: 简单工厂模式: public inter ... -
观察者模式
2012-08-31 00:42 1020简单地说,观察者模式定义了一个一对多的依赖关系,让一个或多个观 ... -
简单工厂模式与工厂方法模式
2012-08-30 23:49 14281:简单工厂模式 UML图: ...
相关推荐
设计模式之命令模式 设计模式之命令模式代码 设计模式之命令模式代码
命令模式(Command) 用意:把一个请求封装到一个对象中,把发出命令和执行命令的责任分开,委派给不同的对象实现。
设计模式之命令模式,你值得拥有,帮你快速掌握命令模式的实例。
命令模式(Command),将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或纪录请求日志,以及支持可撤销的操作。 那么让我们简要的说一下命令模式的特点。 它能比较容易地设计一个...
设计模式这命令模式的Java实现版本和UML设计类图
学习js设计模式的例子,用到了命令模式、修装模式
命令模式代码demo 命令模式代码demo 命令模式代码demo
C#设计模式之 -- 命令模式代码示例和应用Dome
命令模式的示例代码和文档,学习命令模式的参考资料。
C#命令模式应用
命令模式(多命令)的代码(Java), 详细描述了命令模式(多命令)的代码架构.
ios平台中通过最简单的代码讲解命令模式,可在博客http://blog.sina.com.cn/s/blog_161d504630102wxis.html中查看简单解释
命令模式的C++实现
设计模式--命令模式java例子
设计模式C++学习之命令模式(Command)
C#命令模式模型,参考GOF 《设计模式》,模型代码。
命令模式:某个方法需要完成某一个行为,但这个行为的具体实现无法确定,必须等到执行该方法时才可以确定, * 这是一个命令模式的一个实例
命令模式,最简单的实现命令模式,没有对需求的负责理解,只针对模式本身。最纯粹的体现命令模式的特点
命令模式的示例代码及类图(用powerDesign画的),都是自己亲手写的,很简单,看不懂你来杀我! 注:oom文件需要手工用powerDesign打开,默认没有被PD关联。