您的位置:首页 > 编程语言 > Java开发

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 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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: