java命令设计模式
2015-07-21 16:56
555 查看
下面以一个示意性的系统,说明命令模式的结构。
实际实现过程是:
Invoker 持有虚拟命令对象 command,发送命令runCommand,具体命令实现类concreteCommand执行命令,在执行之前,需确实命令具体的执行者Receiver,可以通过工厂模式实现,具体的client实际上就是构造这些对象 ,完成这些逻辑的装配而已;
命令模式涉及到五个角色,它们分别是:
● 客户端(Client)角色:创建一个具体命令(ConcreteCommand)对象并确定其接收者。
● 命令(Command)角色:声明了一个给所有具体命令类的抽象接口。
● 具体命令(ConcreteCommand)角色:定义一个接收者和行为之间的弱耦合;实现execute()方法,负责调用接收者的相应操作。execute()方法通常叫做执行方法。
● 请求者(Invoker)角色:负责调用命令对象执行请求,相关的方法叫做行动方法。
● 接收者(Receiver)角色:负责具体实施和执行一个请求。任何一个类都可以成为接收者,实施和执行请求的方法叫做行动方法。
源代码:
接收者角色类 接口 Receiver:
public class Invoker {
private Command command;
public void setCommand(Command command) {
this.command = command;
}
public void runCommand(int commandType){
this.command.excute(commandType);
}
}
接受者具体实现:
public class OffReceiver implements Receiver {
public void action(){
System.out.println("关闭..............................");
}
}
抽象命令角色类
public interface Command {
public void excute(int commandType);
}
具体命令角色类
public class ConcreteCommand implements Command {
private Receiver receiver;
private OnReceiver onReceiver = new OnReceiver();
private OffReceiver offReceiver = new OffReceiver();
public void setReceiver(Receiver receiver) {
this.receiver = receiver;
}
@Override
public void excute(int commandType) {
processBefore(commandType);
this.receiver.action();
}
private void processBefore(int commandType) {
switch (commandType){
case 1:
this.receiver=onReceiver;
break;
case 2:
this.receiver=offReceiver;
break;
default:
this.receiver=offReceiver;
}
}
}
请求者角色类
public class Invoker {
private Command command;
public void setCommand(Command command) {
this.command = command;
}
public void runCommand(int commandType){
this.command.excute(commandType);
}
}
客户端角色类
public class Client {
public static void main(String[] args) {
ConcreteCommand concreteCommand = new ConcreteCommand();
Invoker invoker = new Invoker();
invoker.setCommand(concreteCommand);
invoker.runCommand(1);
}
}
实际实现过程是:
Invoker 持有虚拟命令对象 command,发送命令runCommand,具体命令实现类concreteCommand执行命令,在执行之前,需确实命令具体的执行者Receiver,可以通过工厂模式实现,具体的client实际上就是构造这些对象 ,完成这些逻辑的装配而已;
命令模式涉及到五个角色,它们分别是:
● 客户端(Client)角色:创建一个具体命令(ConcreteCommand)对象并确定其接收者。
● 命令(Command)角色:声明了一个给所有具体命令类的抽象接口。
● 具体命令(ConcreteCommand)角色:定义一个接收者和行为之间的弱耦合;实现execute()方法,负责调用接收者的相应操作。execute()方法通常叫做执行方法。
● 请求者(Invoker)角色:负责调用命令对象执行请求,相关的方法叫做行动方法。
● 接收者(Receiver)角色:负责具体实施和执行一个请求。任何一个类都可以成为接收者,实施和执行请求的方法叫做行动方法。
源代码:
接收者角色类 接口 Receiver:
public class Invoker {
private Command command;
public void setCommand(Command command) {
this.command = command;
}
public void runCommand(int commandType){
this.command.excute(commandType);
}
}
接受者具体实现:
public class OffReceiver implements Receiver {
public void action(){
System.out.println("关闭..............................");
}
}
public class OnReceiver implements Receiver { public void action(){ System.out.println("NOW ,must do somethin...........打开"); } }
抽象命令角色类
public interface Command {
public void excute(int commandType);
}
具体命令角色类
public class ConcreteCommand implements Command {
private Receiver receiver;
private OnReceiver onReceiver = new OnReceiver();
private OffReceiver offReceiver = new OffReceiver();
public void setReceiver(Receiver receiver) {
this.receiver = receiver;
}
@Override
public void excute(int commandType) {
processBefore(commandType);
this.receiver.action();
}
private void processBefore(int commandType) {
switch (commandType){
case 1:
this.receiver=onReceiver;
break;
case 2:
this.receiver=offReceiver;
break;
default:
this.receiver=offReceiver;
}
}
}
请求者角色类
public class Invoker {
private Command command;
public void setCommand(Command command) {
this.command = command;
}
public void runCommand(int commandType){
this.command.excute(commandType);
}
}
客户端角色类
public class Client {
public static void main(String[] args) {
ConcreteCommand concreteCommand = new ConcreteCommand();
Invoker invoker = new Invoker();
invoker.setCommand(concreteCommand);
invoker.runCommand(1);
}
}
相关文章推荐
- 文章标题
- Java中的super 和 this
- Spring MVC开发之一 开发环境的搭建
- Java的垃圾回收机制
- Java的垃圾回收机制
- 【Spring八】Spring与Hibernate整合
- 利用java类的反射机制,实现了 映射 获得post(get)的参数 的BaseServlet
- 使用jersey(2.5.1)搭建java REST服务
- java FileReader与FileWriter 代码笔记
- 【Spring七】JDBC编程之声明式事务处理
- Java实现的Windows资源管理器实例
- Java并发编程:并发容器之CopyOnWriteArrayList(转载)
- 【Spring六】JDBC编程之XML配置
- 【Spring五】AOP之使用注解配置
- 【Spring四】AOP之XML配置
- java创建日期
- spring validation
- Java创建对象的初始化顺序
- 【Spring三】使用注解配置bean
- Java多态与动态绑定