1 抽象类组合 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 void print() { throw new UnsupportedOperationException(); } } 2 list public class Menu extends MenuComponent { private String name; private String description; List<MenuComponent> list = new ArrayList<MenuComponent>(); public Menu(String name, String description) { this.name = name; this.description = description; } @Override public void add(MenuComponent menuComponent) { list.add(menuComponent); } @Override public void remove(MenuComponent menuComponent) { list.remove(menuComponent); } @Override public MenuComponent getChild(int i) { return list.get(i); } @Override public void print() { System.out.println("Menu------------" + this.name); for(MenuComponent c : list) { c.print(); } } @Override public String getName() { return this.name; } @Override public String getDescription() { return this.description; } } 3 数组 实现Iterator public class ArrayMenu extends MenuComponent implements Iterator<MenuComponent>{ private String name; private String description; private final int size = 6; private int position = 0; private int iPosition = 0; MenuComponent[] array = new MenuComponent[size]; public ArrayMenu(String name, String description) { this.name = name; this.description = description; } @Override public void add(MenuComponent menuComponent) { array[position] = menuComponent; position ++; } @Override public void remove(MenuComponent menuComponent) { if(position < 0) { throw new IllegalStateException("You can't remove an item until you have done at least one nexe"); }else { if(array[position] != null) { for(int i=position-1; i<size-1; i++) { array[i] = array[i+1]; } array[size-1] = null; } } } @Override public MenuComponent getChild(int i) { return array[i]; } @Override public void print() { System.out.println("arrayNume: " + this.name); while(hasNext()) { MenuComponent c = next(); if(c != null) { c.print(); } } } @Override public String getName() { return this.name; } @Override public String getDescription() { return this.description; } @Override public boolean hasNext() { if(iPosition < array.length) { return true; }else { return false; } } @Override public MenuComponent next() { if(iPosition < array.length) { return array[iPosition++]; } return null; } @Override public void remove() { throw new UnsupportedOperationException(); } } 4. MenuItem public class MenuItem extends MenuComponent { private String name; private String description; private double price; public MenuItem(String name, String description, double price) { this.name = name; this.description = description; this.price = price; } @Override public String getName() { return this.name; } @Override public String getDescription() { return this.description; } @Override public double getPrice() { return this.price; } @Override public void print() { System.out.println("name:" + this.name + " description: " + this.description + " price: " + this.price); } } 5 Test public class Test { public static void main(String[] args) { Menu item = new Menu("listMenu", "listItem"); item.add(new MenuItem("menu1", "menu1111", 100)); item.add(new MenuItem("menu2", "menu2222", 200)); item.add(new MenuItem("menu3", "menu3333", 300)); item.print(); ArrayMenu arrayMenu = new ArrayMenu("arrayMenu", "arrayMenu"); arrayMenu.add(new MenuItem("menu4", "Menu44", 400)); arrayMenu.add(new MenuItem("menu5", "Menu55", 500)); arrayMenu.add(new MenuItem("menu6", "Menu66", 600)); arrayMenu.print(); } } 6 输出 Menu------------listMenu name:menu1 description: menu1111 price: 100.0 name:menu2 description: menu2222 price: 200.0 name:menu3 description: menu3333 price: 300.0 arrayNume: arrayMenu name:menu4 description: Menu44 price: 400.0 name:menu5 description: Menu55 price: 500.0 name:menu6 description: Menu66 price: 600.0 |
|
来自: Bradypod > 《design pattern》