java命令设计模式

下面以一个示意性的系统,说明命令模式的结构。


  实际实现过程是:

     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);
    }
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值