成都营销型网站,图片制作视频软件,企业网站推广计划,宁波网络营销咨询公司上一章链接#xff1a;
《HeadFirst设计模式(第二版)》第九章代码——迭代器模式_轩下小酌的博客-CSDN博客 前面说到#xff0c;当一个菜单里面出现了子菜单的时候#xff0c;前面的迭代器模式得换成组合模式。 组合模式#xff1a; 允许将对象组合成树形结构来表现部分-整…上一章链接
《HeadFirst设计模式(第二版)》第九章代码——迭代器模式_轩下小酌的博客-CSDN博客 前面说到当一个菜单里面出现了子菜单的时候前面的迭代器模式得换成组合模式。 组合模式 允许将对象组合成树形结构来表现部分-整体层次结构。组合让用户可以统一处理个别对象和对象组合。 代码文件结构 MenuComponent
package Chapter9_CompositePattern;/*** Author 竹心* Date 2023/8/18**/public abstract class MenuComponent {public void add(MenuComponent menuComponent) {throw new UnsupportedOperationException();}public void remove(MenuComponent menuComponent) {throw new UnsupportedOperationException();}public MenuComponent getChild(int i) {throw new UnsupportedOperationException();}public String getName() {throw new UnsupportedOperationException();}public String getDescription() {throw new UnsupportedOperationException();}public double getPrice() {throw new UnsupportedOperationException();}public boolean isVegetarian() {throw new UnsupportedOperationException();}public void print() {throw new UnsupportedOperationException();}
}MenuItem
package Chapter9_CompositePattern;/*** Author 竹心* Date 2023/8/18**/public class MenuItem extends MenuComponent{String name;String description;boolean vegetarian;double price;public MenuItem(String name,String description,boolean vegetarian,double price){this.name name;this.description description;this.vegetarian vegetarian;this.price price;}public String getName() {return name;}public String getDescription() {return description;}public double getPrice() {return price;}public boolean isVegetarian() {return vegetarian;}public void print() {System.out.print( getName());if (isVegetarian()) {System.out.print((v));}System.out.println(, getPrice());System.out.println( -- getDescription());}
}Menu
package Chapter9_CompositePattern;import java.util.ArrayList;
import java.util.Iterator;/*** Author 竹心* Date 2023/8/18**/public class Menu extends MenuComponent{//菜单组合ArrayListMenuComponent menuComponents new ArrayListMenuComponent();String name;String description;public Menu(String name, String description) {this.name name;this.description description;}public void add(MenuComponent menuComponent) {menuComponents.add(menuComponent);}public void remove(MenuComponent menuComponent) {menuComponents.remove(menuComponent);}public MenuComponent getChild(int i) {return (MenuComponent)menuComponents.get(i);}public String getName() {return name;}public String getDescription() {return description;}public void print() {System.out.print(\n getName());System.out.println(, getDescription());System.out.println(---------------------);//这里递归打印IteratorMenuComponent iterator menuComponents.iterator();while (iterator.hasNext()) {MenuComponent menuComponent (MenuComponent)iterator.next();menuComponent.print();}}
}Waitress
package Chapter9_CompositePattern;/*** Author 竹心* Date 2023/8/18**/public class Waitress {MenuComponent allMenus;//菜单根节点public Waitress(MenuComponent allMenus) {this.allMenus allMenus;}public void printMenu() {allMenus.print();}
}MenuTestDrive
package Chapter9_CompositePattern;/*** Author 竹心* Date 2023/8/18**/public class MenuTestDrive {public static void main(String args[]) {MenuComponent pancakeHouseMenu new Menu(PANCAKE HOUSE MENU, Breakfast);MenuComponent dinerMenu new Menu(DINER MENU, Lunch);MenuComponent cafeMenu new Menu(CAFE MENU, Dinner);MenuComponent dessertMenu new Menu(DESSERT MENU, Dessert of course!);MenuComponent coffeeMenu new Menu(COFFEE MENU, Stuff to go with your afternoon coffee);MenuComponent allMenus new Menu(ALL MENUS, All menus combined);allMenus.add(pancakeHouseMenu);allMenus.add(dinerMenu);allMenus.add(cafeMenu);pancakeHouseMenu.add(new MenuItem(KBs Pancake Breakfast,Pancakes with scrambled eggs and toast,true,2.99));dinerMenu.add(new MenuItem(Vegetarian BLT,(Fakin) Bacon with lettuce tomato on whole wheat,true,2.99));dinerMenu.add(dessertMenu);dessertMenu.add(new MenuItem(Apple Pie,Apple pie with a flakey crust, topped with vanilla icecream,true,1.59));cafeMenu.add(coffeeMenu);coffeeMenu.add(new MenuItem(Coffee Cake,Crumbly cake topped with cinnamon and walnuts,true,1.59));Waitress waitress new Waitress(allMenus);//这示例代码怎么这么多。。。waitress.printMenu();}
}