10.8.2内部类与控制框架(设计模式之命令模式)

下面的代码是来自于《大话设计模式》,这里看起来有点怪怪的,因为把《大话设计模式》《Think in JAVA》两本书的读书笔记混在一起写了。

来吧
直接上代码
来揭开命令模式的神秘面纱,吼吼。

烤串师傅类,哈哈,逗比的但是生动的例子。
其实烤串师傅类在设计模式中正经的名字为receiver类。

public class Barbecuer {
    public void bakeMutton() {
        System.out.println("烤羊肉串!");
    }

    public void bakeChickenWing() {
        System.out.println("烤鸡翅!");
    }
}

接下来是一个抽象类,一个名为‘命令’的类。

public abstract class Command {
    protected Barbecuer barbecuer;

    public Command(Barbecuer barbecuer) {
        this.barbecuer = barbecuer;
    }

    public abstract void excuteCommand();
}

然后是两个Command类的子类。
注意看这里,这两个类继承Command类,是命令模式的关键点。
烤串命令类↓↓↓

public class BakeMuttonCommand extends Command { //烤串命令类

    public BakeMuttonCommand(Barbecuer barbecuer) {
        super(barbecuer);
    }

    @Override
    public void excuteCommand() {
        barbecuer.bakeMutton();
    }
}

烤鸡翅命令类↓↓↓

public class BakeChickenWingCommand extends Command { //烤鸡翅命令类

    public BakeChickenWingCommand(Barbecuer barbecuer) {
        super(barbecuer);
    }

    @Override
    public void excuteCommand() {
        barbecuer.bakeChickenWing();
    }
}

服务员类↓↓↓
服务员类在设计模式中正经的名字为invoker类。(正经是东北话)

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class Waiter2 {
    private List<Command> orders = new ArrayList<Command>();


    public void setOrder(Command command) {
        if (command.toString() == "") {

        }
        else {
            orders.add(command);//这里是将命令command添加到列表当中
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd 'at' HH:mm:ss z");
            Date date = new Date(System.currentTimeMillis());

            System.out.println("增加订单: " + command.toString() + " 时间 : " + format.format(date)  );
        }
    }


    public void CancelOrder(Command command) {
        orders.remove(command);
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd 'at' HH:mm:ss z");
        Date date = new Date(System.currentTimeMillis());
        System.out.println("取消订单 : " + command.toString() + " 时间 : " + format.format(date));
    }

    public void notify_() {
        for(Command command : new ArrayList<Command>(orders)) {
            command.excuteCommand();
        }
    }
}

Main

public class Main3 {
    public static void main(String[] args) {
        Barbecuer barbecuer = new Barbecuer();
        Command bakeMuttonCommand1 = new BakeMuttonCommand(barbecuer);
        Command bakeMuttonCommand2 = new BakeMuttonCommand(barbecuer);
        Command bakeChickenWingCommand1 = new BakeChickenWingCommand(barbecuer);
        Waiter2 girl = new Waiter2();


        girl.setOrder(bakeMuttonCommand1);
        girl.setOrder(bakeMuttonCommand2);
        girl.setOrder(bakeChickenWingCommand1);

        girl.notify_();


    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容