设计模式(迭代器)


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();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值