美文网首页
behavior:迭代器模式

behavior:迭代器模式

作者: 柳源居士 | 来源:发表于2019-01-22 19:37 被阅读6次

迭代器模式是一个行为型的模式,它用于在不必了解集合内部构成的情况下,遍历集合内部元素。
实现思路:

  1. 实现统一的接口,来约束行为。
  2. 创建需要遍历的集合的迭代器,来实现这个统一接口,并实现迭代方法。迭代方法根据这个集合的特点来完成,迭代器需要获取来自集合传入的数据。
  3. 在集合内部创建迭代器,并把自己需要迭代的数据结构传入迭代器里。
  4. 通过使用集合类来获取迭代器,并迭代自身数据结构。

实现:

package Iterator;

public interface Iterator {
    boolean hasNext();
    Object next();
}
package Iterator;

public interface Menu{
   Iterator createIterator();
}
package Iterator;

import java.util.ArrayList;
import java.util.List;

public class BreakfastMenu implements Menu {

    private List<MenuItem> menuItems;


    public BreakfastMenu() {
        menuItems =new ArrayList<MenuItem>();
        addMenuItem("油条","油炸面食",true,2.00);
        addMenuItem("豆浆","豆制品",true,2.00);
        addMenuItem("胡辣汤","热辣的汤",false,5.00);
        addMenuItem("素煎包","带素馅油煎面食",false,0.25);
    }

    public Iterator createIterator(){
        return new BreakfastMenuIterator(menuItems);
    }

    public void addMenuItem(String name,String  description,boolean isVegetarian,double price){
        MenuItem item=new MenuItem(name,description,isVegetarian,price);
        menuItems.add(item);
    }

}
package Iterator;

import java.util.List;

public class BreakfastMenuIterator implements Iterator{

    private  List<MenuItem> menuItems;
    private  int position=0;

    public BreakfastMenuIterator(List<MenuItem> menuItems) {
        this.menuItems=menuItems;
    }

    @Override
    public boolean hasNext() {
        if(position>=menuItems.size()){
            return false;
        }
        return true;
    }

    @Override
    public Object next() {
        MenuItem item=menuItems.get(position);
        position+=1;
        return item;
    }
}

package Iterator;

import java.awt.*;

public class LaunchMenu implements Menu{

    private static final int MAX_SIZE=6;
    int numberOfItems=0;
    private MenuItem[] menuItems;

    public LaunchMenu() {
        menuItems=new MenuItem[MAX_SIZE];
        addItem("羊肉烩面","汤面",false,12.00);
        addItem("米饭","大米食品",true,2.00);
        addItem("牛肉面","汤面",false,12.00);
        addItem("三鲜水饺","带素馅面食",false,15);
    }

    public void addItem(String name,String description,boolean isVegetarian, double price){
        MenuItem item=new MenuItem(name,description,isVegetarian,price);
        if(numberOfItems>=MAX_SIZE){

        }else {
            menuItems[numberOfItems]=item;
            numberOfItems+=1;
        }
    }

    public Iterator createIterator(){
        return new LaunchMenuIterator(menuItems);
    }

}

package Iterator;

public class LaunchMenuIterator implements Iterator{

    private MenuItem[] menuItems;
    int position=0;

    public LaunchMenuIterator(MenuItem[] menuItems) {
        this.menuItems=menuItems;
    }

    @Override
    public boolean hasNext() {
        if(position>=menuItems.length||menuItems[position]==null){
            return false;
        }
        return true;
    }

    @Override
    public Object next() {
        MenuItem item=menuItems[position];
        position+=1;
        return item;
    }
}

package Iterator;

public class MenuItem {
    private String description;
    private String name;
    private Boolean isVegetarian;
    private double price;

    public MenuItem(String name,String description,  Boolean isVegetarian, double price) {
        this.description = description;
        this.name = name;
        this.isVegetarian = isVegetarian;
        this.price = price;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Boolean getVegetarian() {
        return isVegetarian;
    }

    public void setVegetarian(Boolean vegetarian) {
        isVegetarian = vegetarian;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }
}
package Iterator;

public class Waitress {

    Menu breakfastMenu;
    Menu launchMenu;

    public Waitress(Menu breakfastMenu,Menu launchMenu) {
        this.breakfastMenu=breakfastMenu;
        this.launchMenu=launchMenu;
    }

    public void printMenu(){
        Iterator iterator=breakfastMenu.createIterator();
        printMenu(iterator);
        Iterator iteratorLanch=launchMenu.createIterator();
        printMenu(iteratorLanch);
    }

    public void printMenu(Iterator iterator){
        while (iterator.hasNext()){
            MenuItem item=(MenuItem)iterator.next();
            System.out.println("------------------------");
            System.out.println("Name:"+item.getName());
            System.out.println("Description:"+item.getDescription());
            System.out.println("Vagetarian:"+item.getVegetarian());
            System.out.println("Price:"+item.getPrice());

        }
    }
}
import Iterator.BreakfastMenu;
import Iterator.LaunchMenu;
import Iterator.Waitress;

public class Main {

    public static void main(String[] args) {
        BreakfastMenu breakfastMenu=new BreakfastMenu();
        LaunchMenu launchMenu=new LaunchMenu();
        Waitress waitress=new Waitress(breakfastMenu,launchMenu);
        waitress.printMenu();
    }
}

关键点:
为每个需要迭代的类创建一个迭代器,通过迭代器来使用该类集合的数据。

相关文章

  • behavior:迭代器模式

    迭代器模式是一个行为型的模式,它用于在不必了解集合内部构成的情况下,遍历集合内部元素。实现思路: 实现统一的接口,...

  • 设计模式(17) 迭代器模式

    迭代器模式 基于IEnumerable的实现 使用场景 迭代器模式的优缺点 迭代器模式 迭代器模式用于顺序访问集合...

  • 第5章 -行为型模式-迭代器模式

    一、迭代器模式的简介 二、迭代器模式的优缺点 三、迭代器模式的实例

  • 行为型模式:迭代器模式

    LieBrother原文:行为型模式:迭代器模式 十一大行为型模式之六:迭代器模式。 简介 姓名 :迭代器模式 英...

  • Iterator模式

    迭代器模式(Iterator模式) 定义: 迭代器(Iterator)模式,又叫做游标(Cursor)模式。 ...

  • 迭代器模式

    一、迭代器模式介绍 二、迭代器模式代码实例

  • 设计模式 | 迭代器模式及典型应用

    本文的主要内容: 介绍迭代器模式 源码分析迭代器模式的典型应用Java集合中的迭代器模式Mybatis中的迭代器模...

  • 设计模式系列——迭代器模式

    迭代器模式介绍 迭代器模式是行为模式之一,又称为(Cursor)模式。迭代器模式源于对容器的访问,如List,Ma...

  • php设计模式——迭代器模式

    迭代器模式 说明 迭代器模式是遍历集合的成熟模式,迭代器模式的关键是将遍历集合的任务交给一个叫做迭代器的对象,它的...

  • JavaScript设计模式五(迭代器模式)

    JavaScript设计模式五(迭代器模式) 迭代器模式的定义: 迭代器模式的意思就是提供一种方法能够顺序的访问聚...

网友评论

      本文标题:behavior:迭代器模式

      本文链接:https://www.haomeiwen.com/subject/visbdqtx.html