设计模式 - 命令模式(command pattern) 具体解释
Posted blfbuaa
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式 - 命令模式(command pattern) 具体解释相关的知识,希望对你有一定的参考价值。
命令模式(command pattern) 详细解释
本文地址: http://blog.csdn.net/caroline_wendy
命令模式: 将请求封装成对象, 以便使用不同的请求\队列\日志来參数化其它对象. 命令模式也支持可撤销操作.
命令模式:
调用者(Invoker);
命令(Command): 可运行方法(execute), 详细命令(Concrete Command);
接受者(Receiver): 调用命令(Set Command);
详细方法:
1. 详细对象.
/** * @time 2014年6月9日 */ package command; /** * @author C.L.Wang * */ public class Light { public Light() {} public void on() { System.out.println("Light is on"); } public void off() { System.out.println("Light is off"); } } /** * @time 2014年6月9日 */ package command; /** * @author C.L.Wang * */ public class GarageDoor { public GarageDoor() {} public void up() { System.out.println("Garage Door is Open"); } public void down() { System.out.println("Garage Door is Closed"); } public void stop() { System.out.println("Garage Door is Stopped"); } public void lightOn() { System.out.println("Garage light is on"); } public void lightOff() { System.out.println("Garage light is off"); } }
2. 命令接口(command interface), 包括运行方法execute().
/** * @time 2014年6月9日 */ package command; /** * @author C.L.Wang * */ public interface Command { public void execute(); }
3. 详细命令(concrete command), 继承命令接口, 实现接口的方法.
/** * @time 2014年6月9日 */ package command; /** * @author C.L.Wang * */ public class LightOnCommand implements Command { Light light; public LightOnCommand (Light light) { this.light = light; } /* (non-Javadoc) * @see command.Command#execute() */ @Override public void execute() { // TODO Auto-generated method stub light.on(); } } /** * @time 2014年6月9日 */ package command; /** * @author C.L.Wang * */ public class GarageDoorOpenCommand implements Command { GarageDoor garageDoor; public GarageDoorOpenCommand (GarageDoor garageDoor) { this.garageDoor = garageDoor; } /* (non-Javadoc) * @see command.Command#execute() */ @Override public void execute() { // TODO Auto-generated method stub garageDoor.up(); } }
4. 接受者(receiver), 通过传递的命令參数, 调用运行方法.
/** * @time 2014年6月9日 */ package command; /** * @author C.L.Wang * */ public class SimpleRemoteControl { Command slot; public SimpleRemoteControl() {} public void setCommand(Command command) { this.slot = command; } public void buttonWasPressed() { slot.execute(); } }
5. 測试, 创建接收者, 创建对象, 将对象传递至命令, 接受者调用命令, 运行.
/** * @time 2014年6月9日 */ package command; /** * @author C.L.Wang * */ public class RemoteControlTest { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub SimpleRemoteControl remote = new SimpleRemoteControl(); Light light = new Light(); GarageDoor garageDoor = new GarageDoor(); LightOnCommand lightOn = new LightOnCommand(light); GarageDoorOpenCommand garageOpen = new GarageDoorOpenCommand(garageDoor); remote.setCommand(lightOn); remote.buttonWasPressed(); remote.setCommand(garageOpen); remote.buttonWasPressed(); } }
以上是关于设计模式 - 命令模式(command pattern) 具体解释的主要内容,如果未能解决你的问题,请参考以下文章
设计模式 - 命令模式(command pattern) 多命令 具体解释