命令者模式

来源:互联网 发布:音频数据压缩算法 编辑:程序博客网 时间:2024/06/07 21:47

命令模式:将一个请求封装成一个对象,从而使你可用不同的请求对客户进行参数化

抽象实例

Receiver.java

/** * 命令的接受者 * @author Carl_Hugo */public class Receiver {    public void action(){        System.out.println("执行请求");    }}

Command.java

/** * 声明执行操作的接口 * @author Carl_Hugo * */public abstract class Command {    protected Receiver receiver;    public Command(Receiver receiver){        this.receiver=receiver;    }    public abstract void execute();}/** * 将接收者对象绑定于一个动作,调用接受者相应的动作,以实现execute() * @author Carl_Hugo */class ConcreteCommand extends Command{    public ConcreteCommand(Receiver receiver) {        super(receiver);    }    @Override    public void execute() {        receiver.action();    }}

Invoker.java

/** * 要求该命令执行该请求 * @author Carl_Hugo */public class Invoker {    private Command command;    public void setCommand(Command command){        this.command=command;    }    public void executeCommand(){        command.execute();    }}

Test.java

public class Test {    public static void main(String[] args) {        //创建命令的接收者        Receiver receiver = new Receiver();        //创建具体的执行命令        ConcreteCommand concreteCommand = new ConcreteCommand(receiver);        //创建命令传递者        Invoker invoker = new Invoker();        //将执行命令设置给命令传递者        invoker.setCommand(concreteCommand);        //执行命令        invoker.executeCommand();    }}

具体实例

Barbecue.java

/** * 命令的执行者  * @author Carl_Hugo */public class Barbecuer {    //烤羊肉    public void bakeMutton(){        System.out.println("烤羊肉串!");    }    //烤鸡翅    public void bakeChickenWing(){        System.out.println("烤鸡翅!");    }}

Command.java

/** * 执行命令的类 * @author Carl_Hugo */public abstract class Command {    protected Barbecuer receiver;    //抽象命令类,确定烤肉串者是谁    public Command(Barbecuer receiver){        this.receiver=receiver;    }    //执行命令    public abstract void executeCommand(); }class BakeMuttonCommand extends Command{    public BakeMuttonCommand(Barbecuer receiver) {        super(receiver);    }    @Override    public void executeCommand() {        receiver.bakeMutton();    }}class BakeChildrenWingCommand extends Command{    public BakeChildrenWingCommand(Barbecuer receiver) {        super(receiver);    }    @Override    public void executeCommand() {        receiver.bakeChickenWing();    }}

Waiter.java

/** * 呼叫执行命令者的类 * @author Carl_Hugo */public class Waiter {    private Command command;    //设置订单    public void setOrder(Command command){        this.command=command;    }    //通知执行    public void notifyBarbecuer(){        command.executeCommand();    }}

Test.java

package zx.command.test2;public class Test {    public static void main(String[] args) {        Barbecuer barbecuer = new Barbecuer();        Command bakeMuttonCommand1 = new BakeMuttonCommand(barbecuer);        Command bakeMuttonCommand2 = new BakeMuttonCommand(barbecuer);        Command bakeChildrenWingCommand = new BakeChildrenWingCommand(barbecuer);        Waiter waiter = new Waiter();        waiter.setOrder(bakeMuttonCommand1);        waiter.notifyBarbecuer();        waiter.setOrder(bakeMuttonCommand2);        waiter.notifyBarbecuer();        waiter.setOrder(bakeChildrenWingCommand);        waiter.notifyBarbecuer();    }}
0 0