设计模式之命令模式
2014-07-14 00:54
134 查看
命令模式:封装调用
这些绝密文件的 投递箱 已经促成了间谍工业的革命。我们只要把需求丢进去,就会有人消失,政府一夕之间改朝换代,而我干洗衣物也好了。我不必管何时,何处,或者如何完成;反正就是完成了。
命令模式将会把封装带到一个全新的境界:把方法调用封装起来。没错,通过封装方法调用,我们可以把运算块包装成形。所以调用此运算块的对象不需要关心事情是如何进行的,只要知道如何使用包装形势的方法来完成它就可以了。
命令模式可将动作的请求者从动作的执行者对象中解耦。
实现命令接口:
首先让所有的命令对象实现相同的包含一个方法的接口。在餐厅的例子中,我们将此方法成为orderup()。然而,现在改为一般惯用的名称execute().
public interface Command{
public void execute();
}
实现一个命令
现在设想实现一个打开电灯的命令,根据厂商所提供的类,Light类有两个方法:on()和off()。下面将是如何实现它的一个命令。
public class LightOnCommand implements Command{
Light light;
public LightOnCommand (Light light){
this.light =light;
}
public void execute(){
ligth.on();
}
}
假如我们有一个遥控器,它只有按钮和对应的插槽
public class SimpleRemoteControl{
Command slot;
public SimpleRemoteControl(){}
pubic void setCommand(Command command){
slot = command;
}
public void buttonWasPressed(){
slot.execute();
}
}
遥控器使用的简单测试
下面只有一段小小的代码,用来测试上面的简单遥控器。让我们来看看这个代码,并指出它和命令模式对应的关系。
public class RemoteControlTest{
public static void main(String[] args){
SimpleRemoteControl remote = new SimpleRemoteControl();
Light light = new Light();
LightOnCommand lightOn = new LightOnCommand(light);
remote.setCommand(light);
remote.buttonWasPressed();
}
}
这些绝密文件的 投递箱 已经促成了间谍工业的革命。我们只要把需求丢进去,就会有人消失,政府一夕之间改朝换代,而我干洗衣物也好了。我不必管何时,何处,或者如何完成;反正就是完成了。
命令模式将会把封装带到一个全新的境界:把方法调用封装起来。没错,通过封装方法调用,我们可以把运算块包装成形。所以调用此运算块的对象不需要关心事情是如何进行的,只要知道如何使用包装形势的方法来完成它就可以了。
命令模式可将动作的请求者从动作的执行者对象中解耦。
实现命令接口:
首先让所有的命令对象实现相同的包含一个方法的接口。在餐厅的例子中,我们将此方法成为orderup()。然而,现在改为一般惯用的名称execute().
public interface Command{
public void execute();
}
实现一个命令
现在设想实现一个打开电灯的命令,根据厂商所提供的类,Light类有两个方法:on()和off()。下面将是如何实现它的一个命令。
public class LightOnCommand implements Command{
Light light;
public LightOnCommand (Light light){
this.light =light;
}
public void execute(){
ligth.on();
}
}
假如我们有一个遥控器,它只有按钮和对应的插槽
public class SimpleRemoteControl{
Command slot;
public SimpleRemoteControl(){}
pubic void setCommand(Command command){
slot = command;
}
public void buttonWasPressed(){
slot.execute();
}
}
遥控器使用的简单测试
下面只有一段小小的代码,用来测试上面的简单遥控器。让我们来看看这个代码,并指出它和命令模式对应的关系。
public class RemoteControlTest{
public static void main(String[] args){
SimpleRemoteControl remote = new SimpleRemoteControl();
Light light = new Light();
LightOnCommand lightOn = new LightOnCommand(light);
remote.setCommand(light);
remote.buttonWasPressed();
}
}
相关文章推荐
- .NET中的设计模式四:命令模式 选择自 lane_cn 的 Blog
- C++实现网络服务器命令模式(设计及模板实现)
- 乐在其中设计模式(C#) - 命令模式(Command Pattern)
- 设计模式学习日志(15)-Command命令(行为型模式) (引用)
- .NET设计模式-命令模式(Command Pattern)
- java设计模式之Command(菜单命令)
- 设计模式(18)-命令模式(Command)
- 设计模式学习笔记(十七)——Command命令模式
- 乐在其中设计模式(C#) - 命令模式(Command Pattern)
- java设计模式之Command(菜单命令)
- 设计模式之命令(Command)---对象行为型模式
- 设计模式(16)-命令模式(Command)
- C#设计模式之命令模式
- 乐在其中设计模式(C#) - 命令模式(Command Pattern)
- 设计模式----Command(命令)模式
- Java实用设计模式:Command(命令模式)
- 设计模式在二维图形程序里的应用(命令模式--command)
- 设计模式之Command命令模式
- 设计模式学习笔记(十六)——Command命令
- 设计模式学习(十二)职责链模式-命令模式-解释器模式