1. 程式人生 > >設計模式(迭代器)

設計模式(迭代器)

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();
    }
}