1 迭代模式
1.1能顺序访问聚合(一群对象)中的各个元素,而又不暴露其内部的表示
1.2 类图
下面通过展现一个例子说明迭代模式,早餐菜单的菜单项是一个ArrayList类型,而午餐菜单的菜单项是一个数组类型,如果要遍历他们,就得通过封装遍历。
2 项目结构和运行结果
2.1 菜单项 MenuItem.java
package com.wby;
/**
* Created by Administrator on 2017/11/22.
*/
//菜单项
public class MenuItem {
String name;
double price;
public MenuItem(String name, double price) {
this.name = name;
this.price = price;
}
public MenuItem() {
}
//获取菜单名字和价格
public String getName() {
return name;
}
public double getPrice() {
return price;
}
}
2.2 早餐菜单 (BreakfastMenu.java)
package com.wby;
import java.util.ArrayList;
import java.util.Iterator;
/**
* Created by Administrator on 2017/11/22.
*/
//构建菜单 菜单项类型为 ArrayList
public class BreakfastMenu {
ArrayList menuItems =new ArrayList();
public BreakfastMenu(){
addItem("面包",5);
addItem("牛奶",4);
}
public void addItem(String name,double price){
MenuItem menuItem=new MenuItem(name,price);
menuItems.add(menuItem);
}
//返回菜单列表
public ArrayList getMenuItems(){
return menuItems;
}
//创建一个迭代器
public Iterator createIterator(){
return new BreakfastMenuIterator(menuItems);
}
}
2.3 午餐菜单 (LunchMenu.java)
package com.wby;
import java.util.Iterator;
/**
* Created by Administrator on 2017/11/22.
*/
//构建菜单,菜单项类型为数组类型
public class LunchMenu {
int num=0;
MenuItem[] menuItems=new MenuItem[10];
public LunchMenu() {
addItem("牛肉饭",10);
addItem("羊肉",12);
}
public void addItem(String name,double price){
MenuItem menuItem=new MenuItem(name,price);
menuItems[num]=menuItem;
num++;
}
public MenuItem[] getMenuItems(){
return menuItems;
}
//创建一个迭代器
public Iterator createIterator(){
return new LunchMenuIterator(menuItems);
}
}
2.4 早餐迭代器(BreakfastMenuIterator.java)
package com.wby;
import java.util.ArrayList;
import java.util.Iterator;
/**
* Created by Administrator on 2017/11/22.
*/
public class BreakfastMenuIterator implements Iterator {
ArrayList menuItems;
int num=0;
public BreakfastMenuIterator(ArrayList menuItems) {
this.menuItems = menuItems;
}
@Override
public boolean hasNext() {
if(num>=menuItems.size()){
return false;
}
else {
return true;
}
}
@Override
public Object next() {
Object object=menuItems.get(num);
num++;
return object;
}
}
2.5 午餐迭代器(LunchMenuIterator.java)
package com.wby;
import java.util.Iterator;
/**
* Created by Administrator on 2017/11/22.
*/
public class LunchMenuIterator implements Iterator {
MenuItem[] menuItems;
int num=0;
public LunchMenuIterator(MenuItem[] menuItems) {
this.menuItems = menuItems;
}
@Override
public boolean hasNext() {
if(num>=menuItems.length||menuItems[num]==null){
return false;
}else {
return true;
}
}
@Override
public Object next() {
MenuItem menuItem=menuItems[num];
num++;
return menuItem;
}
}
2.6服务员(Waitress.java)
package com.wby;
import java.util.Iterator;
/**
* Created by Administrator on 2017/11/22.
*/
public class Waitress {
BreakfastMenu breakfastMenu;
LunchMenu lunchMenu;
public Waitress(BreakfastMenu breakfastMenu, LunchMenu lunchMenu) {
this.breakfastMenu = breakfastMenu;
this.lunchMenu = lunchMenu;
}
public void printMenu(){
Iterator BreakfastMenuIterator= breakfastMenu.createIterator();
Iterator LunchMenuIterator= lunchMenu.createIterator();
System.out.println("===================早餐=========================");
printMenu(BreakfastMenuIterator);
System.out.println("===================午餐========================");
printMenu( LunchMenuIterator);
}
private void printMenu(Iterator iterator){
while (iterator.hasNext()){
MenuItem menuItem=(MenuItem) iterator.next();
System.out.print(menuItem.getName()+": ");
System.out.println(menuItem.getPrice());
}
}
}
2.7 测试类
package com.wby;
/**
* Created by Administrator on 2017/11/22.
*/
public class Main {
public static void main(String []args){
BreakfastMenu breakfastMenu=new BreakfastMenu();
LunchMenu lunchMenu=new LunchMenu();
Waitress waitress=new Waitress(breakfastMenu,lunchMenu);
waitress.printMenu();
}
}