所谓命令模式本质上讲就是对请求的封装:
那我们在什么时候使用呢?
1 如果需要执行的动作需要被抽取出来
2 需要在不同的时刻指定请求
其实命令式最主要的作用还是用于类之间的解耦。
结构图:
示例代码:
package Proxy.command; public class Invoker { //调用哪一个命令 private Command command; public void setCommand(Command command) { this.command = command; } public Command getCommand() { return command; } //执行命令 public void execute (){ getCommand().action(); } }
package Proxy.command; public interface Command { void action(); }
package Proxy.command; public class ConcreateCommand1 implements Command { private Receiver receiver; public ConcreateCommand1(Receiver receiver) { super(); this.receiver = receiver; } @Override public void action() { this.receiver.execute(); } }
package Proxy.command; public class ConcreateCommand2 implements Command { private Receiver receiver; public ConcreateCommand2(Receiver receiver) { super(); this.receiver = receiver; } @Override public void action() { this.receiver.execute(); } }
package Proxy.command; public class Invoker { //调用哪一个命令 private Command command; public void setCommand(Command command) { this.command = command; } public Command getCommand() { return command; } //执行命令 public void execute (){ getCommand().action(); } }
package Proxy.command; public class ReceiverA implements Receiver { @Override public void execute() { System.out.println("我是A接收者"); } }
package Proxy.command; public class ReceiverB implements Receiver { @Override public void execute() { System.out.println("我是B接收者"); } }
package Proxy.command; public class ReceiverC implements Receiver { @Override public void execute() { System.out.println("我是C接收者"); } }
package Proxy.command; public class Client { public static void main(String[] args) { //先声明调用者 Invoker invoker = new Invoker(); //定义接受者 Receiver receiver = new ReceiverB(); //定义一个具体的命令 Command command = new ConcreateCommand1(receiver); invoker.setCommand(command); invoker.execute(); } }
现在有这样的一个应用场景:
我现在需要定义一个方法,这个方法内部大部分功能或者步骤已经确定,但是有小部分不能确定,也就是所谓的动态代码。
举个列子,我现在在方法内部处理一个数组对象,但是数组对象的处理方式并不是确定的,需要根据调用的时候才能确定。
但是Java又不支持直接传入一个java 代码块给方法,怎么办呢?
所以我们有必要对这部分代码进行封装,但是封装的方法也不允许独立存在,在Java 世界,类才是一等的。所以我们实际
传到该方法的是一个对象。该对象通常是一个接口的匿名子类。该接口通常称为命令接口,这种设计模式也称为命令模式。
public class ProcessArray { //Command用于处理数组的逻辑 public void iterateArray(int[] target,Command command){ command.process(target); } }
//Command 接口 public interface Command { public abstract void process(int[] target); }
具体完整的示例代码:
public class ProcessArrayTest { public static void main(String[] args) { ProcessArray processArray = new ProcessArray(); int [] target = {1,3,5,7,9,11}; //第一次处理数组 processArray.iterateArray(target, new Command() { public void process(int[] target) { for(int tmp : target){ System.out.println("current element:"+tmp); } } }); //第二次处理数组 processArray.iterateArray(target, new Command() { public void process(int[] target) { int sum = 0; for(int tmp : target){ sum += tmp; } System.out.println("Total :"+sum); } }); } }
相关推荐
用java实现命令模式。展现命令模式类与类之间的继承,依赖关系。
业务层框架 —— Command Pattern指南.mht业务层框架 —— Command Pattern指南.mht
将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可取消的操作。
CommandPattern)管理智能家电最终代码共4页.pdf.zip
CommandPattern)管理智能家电最终代码共4页.pdf.zip
用最简单的例子理解命令模式(Command Pattern) 命令模式的需求源自想通过一个指令(比如这里IControl的Execute方法)来控制多个类的多个方法,包含了几个要素: 1、命令:让类的各种方法抽象成类实现一个接口 2、...
命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。
Head First 设计模式 (六) 命令模式(Command pattern) C++实现
主要介绍了C#命令模式(Command Pattern),以实例的形式讲述了命令模式通过一个指令来控制多个类的多个方法,需要的朋友可以参考下
jar包,官方版本,自测可用
jar包,官方版本,自测可用
jar包,官方版本,自测可用
jar包,官方版本,自测可用
命令模式(Command Pattern).pdf命令模式(Command Pattern).pdf命令模式(Command Pattern).pdf命令模式(Command Pattern).pdf命令模式(Command Pattern).pdf
CommandPattern:在Java中实现命令模式
flutter_command_pattern_demo flutter_command_pattern_demo 入门 该项目是Flutter应用程序的起点。 如果这是您的第一个Flutter项目,那么有一些资源可以帮助您入门: 要获得Flutter入门方面的帮助,请查看我们的...
12、命令模式COMMAND PATTERN 13、装饰模式DECORATOR PATTERN 14、迭代器模式ITERATOR PATTERN 15、组合模式COMPOSITE PATTERN 16、观察者模式OBSERVER PATTERN 17、责任链模式 18、访问者模式VISITOR PATTERN ...
工厂方法模式(Factory Method Pattern) 观察者模式(Observer Pattern) 建造者模式(Builder Pattern) 解释器模式(Interpreter Pattern) 命令模式(Command Pattern) 模板方法模式(Template Method Pattern) 桥接模式...
在软件系统中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”。但在某些场合,比如要对行为进行“记录、撤销/重做、事务”...《设计模式》]Command模式结构图如下:图1Command模式结构图Command模式将一个请求