假设学校有3个食堂:教工食堂、第一食堂和第二食堂,3个食堂提供的主食都是一样的:米饭、面条和馄饨,但是口味不一样。这样,老师和学生就餐时可以选择其中任意一个食堂的主食,应该使用什么模式设计比较合理?请绘制相应的模型,并使用JAVA代码测试验证模型。
时间: 2024-10-01 12:10:39 浏览: 27
uml ,食堂饭卡管理系统
3星 · 编辑精心推荐
在这种场景下,可以考虑使用"策略模式"(Strategy Pattern)来设计这个系统。策略模式允许你在运行时改变对象的行为,而无需修改其源代码。这里,每个食堂就是一个具体的策略,它们提供相同的接口来选择主食,但内部的具体实现(口味)有所不同。
首先,我们创建一个`Food`接口:
```java
// Food接口
public interface Food {
void serve();
}
```
然后为每个食堂创建一个实现类,分别代表不同的口味:
```java
// 教工食堂
public class TeacherCafeteria implements Food {
@Override
public void serve() {
System.out.println("教工食堂的饭菜:米饭+特色口味");
}
}
// 第一食堂
public class FirstCafeteria implements Food {
@Override
public void serve() {
System.out.println("第一食堂的饭菜:米饭+普通口味");
}
}
// 第二食堂
public class SecondCafeteria implements Food {
@Override
public void serve() {
System.out.println("第二食堂的饭菜:米饭+清淡口味");
}
}
```
接着,我们可以创建一个`DiningHall`类,它接受一个`Food`类型的策略并调用`serve()`方法:
```java
// DiningHall类
public class DiningHall {
private Food food;
public DiningHall(Food food) {
this.food = food;
}
public void dine() {
food.serve();
}
}
```
现在可以用这些食堂的实例来创建`DiningHall`并测试:
```java
public class Main {
public static void main(String[] args) {
// 创建并测试各个食堂
DiningHall teacherCafeteria = new DiningHall(new TeacherCafeteria());
teacherCafeteria.dine(); // 输出:教工食堂的饭菜:米饭+特色口味
DiningHall firstCafeteria = new DiningHall(new FirstCafeteria());
firstCafeteria.dine(); // 输出:第一食堂的饭菜:米饭+普通口味
DiningHall secondCafeteria = new DiningHall(new SecondCafeteria());
secondCafeteria.dine(); // 输出:第二食堂的饭菜:米饭+清淡口味
}
}
```
阅读全文