简单_命令模式
- - ITeye博客命令模式定义:命令模式用一句话表示就是说:一个命令一个类. 在面向对象程式设计的范畴中,命令模式是一种设计模式,将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作. 先来看一看我本人认为每个人学设计模式不得不看的图,尽管“奇丑无比”,甚至曾经“束缚过我们的思想”.
package design.command; /** * @author 作者 E-mail: [email protected] * @version 创建时间:2012-2-1 下午09:55:26 <br> * 命令接口 */ public interface Command { void execute(); }
package design.command; /** * @author 作者 E-mail: [email protected] * @version 创建时间:2012-2-1 下午09:55:51 <br> * 圣旨 */ public class ConcreteCommand implements Command { private Receiver rev; public ConcreteCommand(Receiver rev) { this.rev = rev; } public void execute() { System.out.println("command.execute"); this.rev.action(); } }
package design.command; /** * @author 作者 E-mail: [email protected] * @version 创建时间:2012-2-1 下午09:56:28 <br> * 命令的接受者 */ public class Receiver { public void action(){ System.out.println("receiver.action"); } }
package design.command; /** * @author 作者 E-mail: [email protected] * @version 创建时间:2012-2-1 下午09:58:17 <br> * 命令的执行者 */ public class Invoker { private Command command; public Invoker(Command command) { this.command = command; } //设置执行者要执行的命令 public void setCommand(Command command) { this.command = command; } //执行命令 public void runCommand() { System.out.println("Invoker.runCommand"); this.command.execute(); } }
package design.command; /** * @author 作者 E-mail: [email protected] * @version 创建时间:2012-2-1 下午09:54:54 <br> * */ public class Test { public static void main(String[] args) { /* * 命令模式: * 玉帝下达了一道命令封孙悟空为弼马温,要太上老君去执行 */ Receiver rev = new Receiver();//创建孙悟空----接受命令的人 Command command = new ConcreteCommand(rev);//创建一道给孙悟空的圣旨----命令 Invoker invoker = new Invoker(command);//创建执行该圣旨的人----太上老君 invoker.runCommand();//太上老君宣读该圣旨 //写成一句话(太上老君对孙悟空宣读圣旨) new Invoker(new ConcreteCommand(new Receiver())).runCommand(); } }
package design.command2; /** * @author 作者 E-mail: [email protected] * @version 创建时间:2012-2-1 下午10:32:20 <br> * */ public interface Command { void execute(); }
package design.command2; /** * @author 作者 E-mail: [email protected] * @version 创建时间:2012-2-1 下午10:32:43 <br> * 改进后,接受者不在是一个具体的类而是一个抽象的接受者 */ public interface Receiver { void action(); }
package design.command2; /** * @author 作者 E-mail: [email protected] * @version 创建时间:2012-2-1 下午10:33:27 <br> * 圣旨--命令 */ public class ShengzhiCommand implements Command { //圣旨需要持有一个接受者的引用 private Receiver rev; public ShengzhiCommand(Receiver rev) { this.rev = rev; } public void execute() { this.rev.action(); } }
package design.command2; /** * @author 作者 E-mail: [email protected] * @version 创建时间:2012-2-1 下午10:34:29 <br> * 孙悟空------接受者 */ public class SunWuKongReceiver implements Receiver{ public void action() { System.out.println("孙悟空执行去当弼马温的圣旨"); } }
package design.command2; /** * @author 作者 E-mail: [email protected] * @version 创建时间:2012-2-1 下午10:35:28 <br> * 太上老君----命令的执行者 */ public class TaiShangLaoJunInvoker { private Command command; public void setCommand(Command command) { this.command = command; } public void runCommand() { this.command.execute(); } }
package design.command2; /** * @author 作者 E-mail: [email protected] * @version 创建时间:2012-2-1 下午10:32:07 <br> * */ public class Test { public static void main(String[] args) { TaiShangLaoJunInvoker t = new TaiShangLaoJunInvoker(); //只需要告诉太上老君 圣旨和孙悟空就行了 t.setCommand(new ShengzhiCommand(new SunWuKongReceiver())); t.runCommand(); // t.runCommand(); } }