命令接收者类:
package command_mode; /** * 命令接收者类(业务对象) */ public class Receiver { /** * 业务方法(由命令类调用) */ public void action(){ System.out.println("Receiver.action()"); } }
命令接口:
package command_mode; /** * 命令接口 */ public interface Command { /** * 执行方法 */ public void execute(); }
具体命令类:
package command_mode; /** * 具体命令类 */ public class ConcreteCommand implements Command{ /** * 命令接收者(真正命令执行者) */ private Receiver receiver; /** * 具体命令类构造器, 传入命令接收者, 对它进行调用 */ public ConcreteCommand(Receiver receiver){ this.receiver = receiver; } /** * 具体命令类的执行方法 * 此方法为返回结果为空, 参数为空的方法. * 实际项目中, 可以根据需求, 设计任何返回类型和参数, 并且可多个不同的方法 */ @Override public void execute() { //可以做些日志统计等其它操作 //do.. receiver.action(); //do.. } }
调用者:
package command_mode; /** * 调用者(发起者) * 调用命令 */ public class Invoke { /** * 调用者当前拥有的具体命令类 */ private Command command;//也可以通过容器List<Command>容纳很多命令对象,进行批处理.数据库底层的事务管理就是类似的结构! /** * 调用者构造器 */ public Invoke(){ } /** * 调用者构造器, 传入具体命令对象 */ public Invoke(Command command){ this.command = command; } /** * 运行时可以动态的持有其它具体命令对象 */ public void setCommand(Command command) { this.command = command; } /** * 调用者的执行方法, 用于调用具体命令对象的执行方法 */ public void call(){ //可以做些过滤等其它操作 //do.. command.execute();//如果是多条命令, 可以批处理(循环) //do.. } }
测试类:
package command_mode; public class Client { public static void main(String[] args) { //创建具体命令类(需要一个接收者) Command commandA = new ConcreteCommand(new Receiver()); Command commandB = new ConcreteCommand(new Receiver()); //创建调用者, 并测试两个命令 Invoke invoke = new Invoke(); invoke.setCommand(commandA); invoke.call(); invoke.setCommand(commandB); invoke.call(); //也可以直接调用, 但无法处理更复杂的情况, 没有扩展和灵活性. 然而以上可以适应各种各样的变化 //new Receiver().action(); } }
执行结果:
Receiver.action()
Receiver.action()
谢谢声明出处!
转自: http://www.cnblogs.com/gscq073240/articles/7105851.html

浙公网安备 33010602011771号