支持可撤销操作。@H_502_1@
502_1@
502_1@
502_1@
502_1@
502_1@
502_1@
增加新的具体命令操作很容易。@H_502_1@
502_1@
502_1@
502_1@
502_1@
502_1@
502_1@
修改点的菜单是对已有操作的修改;后厨根据客人下的单做菜,是执行一个操作;但客人并不需要和后厨直接打交道,而是通过服务员完成点餐、修改菜,在没有食材的情况下否决客人的请求操作。@H_502_1@
502_1@
502_1@
502_1@
代码结构图:@H_502_1@
502_1@
502_1@
502_1@
/**
-
@Author: cxh
-
@CreateTime: 18/1/26 15:52
-
@ProjectName: JavaBaseTest
*/
public abstract class AbstractCommand{
protected Barbecuer barbecuer;
AbstractCommand(){}
//执行命令
public abstract void exeCommmand();
}
/**
- @Author: cxh
- @CreateTime: 18/1/26 16:10
- @ProjectName: JavaBaseTest
*/
public class BakeChickenWingCmd extends AbstractCommand{
BakeChickenWingCmd(Barbecuer barbecuer){
super.barbecuer=barbecuer;
}
@Override
public void exeCommmand() {
super.barbecuer.bakeChickenWing();
}
}
/**
- @Author: cxh
- @CreateTime: 18/1/26 16:13
- @ProjectName: JavaBaseTest
*/
public class BakeMuttonCmd extends AbstractCommand {
BakeMuttonCmd(Barbecuer barbecuer){
super.barbecuer=barbecuer;
}
@Override
public void exeCommmand() {
super.barbecuer.bakeMutton();
}
}
/**
- @Author: cxh
- @CreateTime: 18/1/26 16:04
- @ProjectName: JavaBaseTest
*/
public class Barbecuer{
public void bakeMutton(){
System.out.println("烤羊肉串~");
}
public void bakeChickenWing(){
System.out.println("烤鸡翅~");
}
}
/**
-
@Author: cxh
-
@CreateTime: 18/1/26 15:52
-
@ProjectName: JavaBaseTest
*/
public class Client{
//测试类
public static void main(String[] args) {
Waiter waiter=new Waiter();
Barbecuer cook=new Barbecuer();
BakeChickenWingCmd chickenWingCmd=new BakeChickenWingCmd(cook);
BakeMuttonCmd muttonCmd=new BakeMuttonCmd(cook);
waiter.acceptRequest(chickenWingCmd);
waiter.acceptRequest(muttonCmd);
//<a href="/tag/tongzhi/" target="_blank" class="keywords">通知</a>厨师
waiter.notifyCook();
}
}
import java.util.ArrayList;
import java.util.List;
/**
- @Author: cxh
- @CreateTime: 18/1/26 15:56
- @ProjectName: JavaBaseTest
/
public class Waiter{
//用一个list保存很多请求的引用
List list=new ArrayList<>();
//接受请求
public void acceptRequest(AbstractCommand command){
double a=Math.random() 10;
if(a<=5){
String type=command.getClass().getSimpleName();
if(type.equals("BakeChickenWingCmd"))
type="鸡翅";
else
type="羊肉";
System.out.println("不好意思,"+type+"没有了,您可以看一下其他菜品");
}else{
list.add(command);
System.out.println("记录下单日志,如桌号,时间等");
}
}
//撤销请求
public void cancelRequest(AbstractCommand command){
list.remove(command);
}
//通知后厨做菜
public void notifyCook(){
list.forEach(command -> command.exeCommmand());
}
}
502_1@