下面的代码是来自于《大话设计模式》,这里看起来有点怪怪的,因为把《大话设计模式》《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_();
}
}