head first-------------iterator pattern

head first------------迭代器设计模式
       迭代器模式:提供一种方法顺序访问一个聚合对象中的各个元素,而不是去暴露其内部的表示。
       以下是两种实现迭代器模式的方式:第一种为自定义的迭代器,第二种是利用JDK自身提供的Iterator实现
       //第一种方式:自定义实现迭代器
      package com.clark.iteratorpattern;
/**
 * Menu Item class
 * @author Administrator
 *
 */
public class MenuItem {
private String name;//菜单名称
private String description;//菜单描述
private boolean vegetarian;//是否为蔬菜
private double price;//菜单价格
public MenuItem(String name, String description, boolean vegetarian,
double price) {
this.name = name;
this.description = description;
this.vegetarian = vegetarian;
this.price = price;
}
public String getName() {
return name;
}
public String getDescription() {
return description;
}
public boolean isVegetarian() {
return vegetarian;
}
public double getPrice() {
return price;
}
}

package com.clark.iteratorpattern;
/**
 * 迭代器,其用于迭代输出
 * @author Administrator
 *
 */
public interface Iterator{
public  boolean hasNext();
public Object next();
}

package com.clark.iteratorpattern;


import javax.swing.plaf.basic.BasicInternalFrameTitlePane.MaximizeAction;


/**
 * 餐厅订单
 * @author Administrator
 *
 */
public class DinerMenu {
public static final int MAX_ITEMS=6;//限制最大数量为6
public int numberOfItems=0;//initialization zero
MenuItem[] menuItems;//用数组存储
//initialization DinerMenu
public DinerMenu(){
menuItems=new MenuItem[MAX_ITEMS];
addItem("Vegetarian BLT", "Bacon with lettuce on whole wheat", true, 3);
addItem("Soup of the day", "Soup of the day,With a side of potato salad", false, 4);
addItem("qing jiao chao rou", "la jiao chao rou", false, 3.4);
}
//add Item
public void addItem(String name,String description,boolean vegetarian,double price){
MenuItem menuItem=new MenuItem(name, description, vegetarian, price);
if(numberOfItems>=MAX_ITEMS){
System.out.println("Sorry,Menu is full! can't add item to menu");
}else{
menuItems[numberOfItems]=menuItem;
numberOfItems++;
}
}
//迭代得到Iterator接口
public Iterator createIterator(){
return new DinerMenuIterator(menuItems);
}
}

package com.clark.iteratorpattern;


/**
 * 
 * @author Administrator
 *  Diner 实现Iterator 用于迭代输出菜单项
 */
public class DinerMenuIterator implements Iterator {
MenuItem[] items;
int position=0;
public DinerMenuIterator(MenuItem[] items){
this.items=items;
}
public boolean hasNext() {
if(position>=items.length||items[position]==null){
return false;
}else{
return true;
}
}


public Object next() {
MenuItem menuItem=items[position];
position++;
return menuItem;
}


}

package com.clark.iteratorpattern;


import java.util.ArrayList;


/**
 * 煎饼屋
 * @author Administrator
 *
 */
public class PancakeHouseMenu{
ArrayList menuItems;//用ArrayList存储
//initialization DinerMenu
public PancakeHouseMenu(){
menuItems=new ArrayList();
addItem("Dangao BLT", "DanGao with lettuce on whole wheat", true, 3);
addItem("shaobing", "breakfast is shaobing", false, 5);
addItem("doujiang", "yingyang", false, 53.4);
}
//add Item
public void addItem(String name,String description,boolean vegetarian,double price){
MenuItem menuItem=new MenuItem(name, description, vegetarian, price);
menuItems.add(menuItem);
}
//迭代得到Iterator接口
public Iterator createIterator(){
return new PancakeHouseMenuIterator(menuItems);
}
}

package com.clark.iteratorpattern;


import java.util.ArrayList;


/**
 * 
 * @author Administrator
 *  Diner 实现Iterator 用于迭代输出菜单项
 */
public class PancakeHouseMenuIterator implements Iterator {
ArrayList items;
MenuItem menuItem;
int number=0;
public PancakeHouseMenuIterator(ArrayList items){
this.items=items;
}
public boolean hasNext() {
if(number>=items.size()||items.get(number)==null){
return false;
}else{
number++;
return true;
}
}
public Object next() {
return items.get(number-1);
}
}

package com.clark.iteratorpattern;
/**
 * 服务员类
 * @author Administrator
 */
public class Waitress {
//女招待员招待的两个菜单
public PancakeHouseMenu pancakeHouseMenu;
public DinerMenu dinerMenu;

public Waitress(PancakeHouseMenu pancakeHouseMenu, DinerMenu dinerMenu) {
this.pancakeHouseMenu = pancakeHouseMenu;
this.dinerMenu = dinerMenu;
}
//print menu detail
public void printMenu(){
Iterator pancakeIterator=pancakeHouseMenu.createIterator();
Iterator dinerIterator=dinerMenu.createIterator();
System.out.println("Menu\n---------\nBreakFast");
printMenu(pancakeIterator);
System.out.println("\nLunch");
printMenu(dinerIterator);
}
//print iterator 
private void printMenu(Iterator iterator){
while(iterator.hasNext()){
MenuItem menu=(MenuItem)iterator.next();
System.out.print(menu.getName()+", ");
System.out.print(menu.getDescription()+", ");
System.out.println(menu.getPrice());
}
}
}

package com.clark.iteratorpattern;
/**
 * Test CLASS
 * @author Administrator
 *
 */
public class MenuTestDrive {
public static void main(String[] args) {
PancakeHouseMenu pancakeHouseMenu=new PancakeHouseMenu();
DinerMenu dinerMenu=new DinerMenu();

Waitress ws=new Waitress(pancakeHouseMenu, dinerMenu);
ws.printMenu();
}
}

//==================第二种:使用jdk自身迭代器实现====================
package com.clark.iteratorpattern.jdkiterator;


import java.util.Iterator;
public interface Menu {
public Iterator createIterator();
}
package com.clark.iteratorpattern.jdkiterator;
/**
 * Menu Item class
 * @author Administrator
 *
 */
public class MenuItem {
private String name;//菜单名称
private String description;//菜单描述
private boolean vegetarian;//是否为蔬菜
private double price;//菜单价格
public MenuItem(String name, String description, boolean vegetarian,
double price) {
this.name = name;
this.description = description;
this.vegetarian = vegetarian;
this.price = price;
}
public String getName() {
return name;
}
public String getDescription() {
return description;
}
public boolean isVegetarian() {
return vegetarian;
}
public double getPrice() {
return price;
}
}
package com.clark.iteratorpattern.jdkiterator;


import java.util.Iterator;




public class DinerMenu implements Menu {
public static final int MAX_ITEMS=6;//限制最大数量为6
public int numberOfItems=0;//initialization zero
MenuItem[] menuItems;//用数组存储
//initialization DinerMenu
public DinerMenu(){
menuItems=new MenuItem[MAX_ITEMS];
addItem("Vegetarian BLT", "Bacon with lettuce on whole wheat", true, 3);
addItem("Soup of the day", "Soup of the day,With a side of potato salad", false, 4);
addItem("qing jiao chao rou", "la jiao chao rou", false, 3.4);
}
//add Item
public void addItem(String name,String description,boolean vegetarian,double price){
MenuItem menuItem=new MenuItem(name, description, vegetarian, price);
if(numberOfItems>=MAX_ITEMS){
System.out.println("Sorry,Menu is full! can't add item to menu");
}else{
menuItems[numberOfItems]=menuItem;
numberOfItems++;
}
}
//迭代得到Iterator接口
public Iterator createIterator(){
return new DinerMenuIterator(menuItems);
}
public MenuItem[] getMenuItems(){
return menuItems;
}
}
package com.clark.iteratorpattern.jdkiterator;


import java.util.Iterator;
/**
 * 餐厅订单
 * @author Administrator
 *
 */
public class DinerMenuIterator implements Iterator{
MenuItem[] list;
int position = 0;
 
public DinerMenuIterator(MenuItem[] list) {
this.list = list;
}
 
public Object next() {
MenuItem menuItem = list[position];
position = position + 1;
return menuItem;
}
 
public boolean hasNext() {
if (position >= list.length || list[position] == null) {
return false;
} else {
return true;
}
}
  
public void remove() {
if (position <= 0) {
throw new IllegalStateException
("You can't remove an item until you've done at least one next()");
}
if (list[position-1] != null) {
for (int i = position-1; i < (list.length-1); i++) {
list[i] = list[i+1];
}
list[list.length-1] = null;
}
}
}
package com.clark.iteratorpattern.jdkiterator;


import java.util.ArrayList;




/**
 * 煎饼屋
 * @author Administrator
 *
 */
public class PancakeHouseMenu implements Menu{
ArrayList menuItems;//用ArrayList存储,其可以实现Iterator的迭代
//initialization DinerMenu
public PancakeHouseMenu(){
menuItems=new ArrayList();
addItem("Dangao BLT", "DanGao with lettuce on whole wheat", true, 3);
addItem("shaobing", "breakfast is shaobing", false, 5);
addItem("doujiang", "yingyang", false, 53.4);
}
//add Item
public void addItem(String name,String description,boolean vegetarian,double price){
MenuItem menuItem=new MenuItem(name, description, vegetarian, price);
menuItems.add(menuItem);
}
//迭代得到Iterator接口
@Override
public java.util.Iterator createIterator() {
return menuItems.iterator();
}
public ArrayList getMenuItems(){
return menuItems;
}
}

package com.clark.iteratorpattern.jdkiterator;


import java.util.Iterator;


/**
 * 服务员类
 * @author Administrator
 */
public class Waitress {
//女招待员招待的两个菜单
public Menu pancakeHouseMenu;
public Menu dinerMenu;

public Waitress(Menu pancakeHouseMenu, Menu dinerMenu) {
this.pancakeHouseMenu = pancakeHouseMenu;
this.dinerMenu = dinerMenu;
}
//print menu detail
public void printMenu(){
Iterator pancakeIterator= pancakeHouseMenu.createIterator();
Iterator dinerIterator= dinerMenu.createIterator();
System.out.println("Menu\n---------\nBreakFast");
printMenu(pancakeIterator);
System.out.println("\nLunch");
printMenu(dinerIterator);
}
//print iterator 
private void printMenu(Iterator iterator){
while(iterator.hasNext()){
MenuItem menu=(MenuItem)iterator.next();
System.out.print(menu.getName()+", ");
System.out.print(menu.getDescription()+", ");
System.out.println(menu.getPrice());
}
}
}

package com.clark.iteratorpattern.jdkiterator;
/**
 * Test CLASS
 * @author Administrator
 *
 */
public class MenuTestDrive {
public static void main(String[] args) {
Menu pancakeHouseMenu=new PancakeHouseMenu();
Menu dinerMenu=new DinerMenu();

Waitress ws=new Waitress(pancakeHouseMenu, dinerMenu);
ws.printMenu();
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值