您的位置:首页 > 其它

设计模式之命令模式

2013-04-19 17:27 225 查看
命令模式:将一个请求封装成一个对象,使得你用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能

命令模式类图






命令模式五个角色

●  客户端(Client)角色:创建一个具体命令(ConcreteCommand)对象并确定其接收者。

●  命令(Command)角色:声明了一个给所有具体命令类的抽象接口。

●  具体命令(ConcreteCommand)角色:定义一个接收者和行为之间的弱耦合;实现execute()方法,负责调用接收者的相应操作。execute()方法通常叫做执行方法。

●  请求者(Invoker)角色:负责调用命令对象执行请求,相关的方法叫做行动方法。

●  接收者(Receiver)角色:负责具体实施和执行一个请求。任何一个类都可以成为接收者,实施和执行请求的方法叫做行动方法。
下面实现遥控器控制电灯的开关
//命令角色

package com.wdf.command;
/*
* 命令接口
* */
public interface Command {
public void execute();
}


//接收者

package com.wdf.command;

public class Light {
public Light() {}
public void on(){System.out.println("Light is on");}
public void off(){System.out.println("Light is off");}
}


具体命令角色

package com.wdf.command;

public class LightOnCommand implements Command{
Light light;
public LightOnCommand(Light light) {
this.light=light;
}
@Override
public void execute() {
light.on();
}
}
//请求者角色

package com.wdf.command;

public class SimpleRemoteControl {
Command command;
public SimpleRemoteControl(){}
public void setCommand(Command command){
this.command=command;
}
public void buttonWasPressed(){
command.execute();
}
}
客户端角色

package com.wdf.command;

public class Test {

public static void main(String[] args) {
SimpleRemoteControl control=new SimpleRemoteControl();//创建一个调用者,可以用来发送请求
Light light=new Light();//创建一个电灯对象,也就是请求的接受者
LightOnCommand lightOnCommand=new LightOnCommand(light);//创建一个命令,然后将接受者传给它

control.setCommand(lightOnCommand);
control.buttonWasPressed();
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: