1.小王为某五星级酒店开发点餐系统。该酒店为满足客户需要,会在不同的时段提供多种不同的餐饮,其菜单的结构图如图所示。
请你采用面向对象方法通过恰当的设计模式帮助小王对上述菜单进行设计。
思路:
选用组合模式:
适用于树形结构,当容器对象(如文件夹)的某一个方法被调用时,将遍历整个树形结构,寻找也包含这个方法的成员对象(可以是容器对象,也可以是叶子对象,如子文件夹和文件)并调用执行。(递归调用)。
下面给出代码设计思想示例:
菜单:
public abstract class Menu {
private String name;
private Menu back;
private HashMap<String,Menu> map=new HashMap<>();//用于下层菜单、菜品集合管理
Menu(String s,Menu bc){
this.setBack(bc);//对上层链接
this.setName(s);
}
public abstract void operat();//用来实现对不同节点的不同操作
/*此处代码不完整,可添加其他容器对象和叶子对象的通用操作*/
}
子类菜品:
public class Cook extends Menu {
Cook(String s, Menu bc) {
super(s, bc);
// TODO Auto-generated constructor stub
}
@Override
public void operat() {
// TODO Auto-generated method stub
System.out.println("您订了:"+this.getName());
}
}
子菜单:
public class Classify extends Menu {
Classify(String s, Menu bc) {
super(s, bc);
// TODO Auto-generated constructor stub
}
@Override
public void operat() {
// TODO Auto-generated method stub
System.out.println("这里是"+this.getName());
this.showMap();//这里给出菜单展示结果
}
}
完整代码测试结果:
有问题的欢迎在下方评论,或私信,谢谢!