分享

iterator component

 Bradypod 2013-10-29
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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多