有一个烧烤城,有两个摊位,一个摊位是烤鱼的,另外一个摊位可以烤肉串,也可以烤鸡翅。顾客不直接去摊位点食物,而是告诉服务员想吃什么,服务员去摊位下单并把烤好的食物拿给顾客。请用命令模式模拟这个过程
时间: 2024-02-28 09:55:45 浏览: 30
命令模式可以用于将请求或操作封装成一个对象,从而使得请求或操作可以被记录、撤销、重做等。在这个烧烤城的例子中,可以将顾客的点单和服务员的下单操作封装成命令对象,摊位则是命令的接受者。
下面是一个可能的实现:
```java
// 抽象命令类
interface Command {
void execute();
}
// 烤鱼命令类
class GrillFishCommand implements Command {
private final Grill grill;
public GrillFishCommand(Grill grill) {
this.grill = grill;
}
@Override
public void execute() {
grill.grillFish();
}
}
// 烤肉串命令类
class GrillKebabCommand implements Command {
private final Grill grill;
public GrillKebabCommand(Grill grill) {
this.grill = grill;
}
@Override
public void execute() {
grill.grillKebab();
}
}
// 烤鸡翅命令类
class GrillChickenWingCommand implements Command {
private final Grill grill;
public GrillChickenWingCommand(Grill grill) {
this.grill = grill;
}
@Override
public void execute() {
grill.grillChickenWing();
}
}
// 服务员类
class Waiter {
private final Command command;
public Waiter(Command command) {
this.command = command;
}
public void placeOrder() {
command.execute();
}
}
// 烤肉串、烤鱼摊位类
class Grill {
public void grillKebab() {
System.out.println("烤肉串");
}
public void grillFish() {
System.out.println("烤鱼");
}
public void grillChickenWing() {
System.out.println("烤鸡翅");
}
}
```
使用方法如下:
```java
Grill grill = new Grill();
// 顾客点单
Command kebabCommand = new GrillKebabCommand(grill);
Command fishCommand = new GrillFishCommand(grill);
// 服务员下单
Waiter waiter = new Waiter(kebabCommand);
waiter.placeOrder();
waiter = new Waiter(fishCommand);
waiter.placeOrder();
```
这样,服务员可以根据顾客的点单,下达相应的命令给摊位,摊位就可以烤出相应的食物,服务员再把食物拿给顾客。