java设计模式进阶_iterator

原创 2016年08月30日 10:07:04

这里写图片描述

//
//
//  Generated by StarUML(tm) Java Add-In
//
//  @ Project : Untitled
//  @ File Name : ItemIterator.java
//  @ Date : 2016/8/30
//  @ Author : 
//
//




public interface ItemIterator {
    public boolean hasNext();
    public Item next();
}

import java.util.List;

//
//
//  Generated by StarUML(tm) Java Add-In
//
//  @ Project : Untitled
//  @ File Name : TreasureChestltemIterator.java
//  @ Date : 2016/8/30
//  @ Author : 
//
//




public class TreasureChestItemIterator implements ItemIterator {
    private int idx;
    private TreasureChest chest;
    private ItemType type;

    public TreasureChestItemIterator(TreasureChest chest, ItemType type) {
        this.chest = chest;
        this.type = type;
        this.idx = -1;
    }

    private int findNextIdx() {
        List<Item> items = chest.getItems();
        boolean found = false;
        int tempIdx = idx;

        while(!found)
        {
            tempIdx++;
            if(tempIdx >= items.size()){
                tempIdx = -1;
                break;
            }
            if(type.equals(ItemType.ANY)
                    || items.get(tempIdx).getType().equals(type))
            {
                break;
            }
        }

        return tempIdx;
    }

    public boolean hasNext() {
        return findNextIdx() != -1;
    }

    public Item next() {
        idx = findNextIdx();
        if(idx != -1)
            return chest.getItems().get(idx);
        return null;
    }
}


//
//
//  Generated by StarUML(tm) Java Add-In
//
//  @ Project : Untitled
//  @ File Name : Item.java
//  @ Date : 2016/8/30
//  @ Author : 
//
//




public class Item {
    private String name;
    private ItemType type;

    public Item(ItemType type, String name) {
        this.setType(type);
        this.name = name;
    }

    public String toString() {
        return name;
    }

    public ItemType getType() {
        return type;
    }

    public void setType(ItemType type) {
        this.type = type;
    }
}


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

//
//
//  Generated by StarUML(tm) Java Add-In
//
//  @ Project : Untitled
//  @ File Name : TreasureChest.java
//  @ Date : 2016/8/30
//  @ Author : 
//
//




public class TreasureChest {

    private List<Item> items;

    public TreasureChest() {
        items = new ArrayList<>();
        items.add(new Item(ItemType.POTION,"Potion of courage"));
        items.add(new Item(ItemType.RING,"Ring of shadows"));
        items.add(new Item(ItemType.POTION,"Potion of wisdom"));
        items.add(new Item(ItemType.POTION,"Potion of blood"));
        items.add(new Item(ItemType.WEAPON,"Sword of silver +1"));
        items.add(new Item(ItemType.POTION,"Potion of rust"));
        items.add(new Item(ItemType.POTION,"Potion of healing"));
        items.add(new Item(ItemType.RING,"Ring of armor"));
        items.add(new Item(ItemType.WEAPON,"Steel halberd"));
        items.add(new Item(ItemType.WEAPON,"Dagger of poison"));
    }

    public ItemIterator iterator(ItemType type) {
        return new TreasureChestItemIterator(this,type);
    }

    public List<Item> getItems() {
        ArrayList<Item> list = new ArrayList<>();
        list.addAll(items);
        return list;
    }
}


public enum ItemType {
    ANY,
    WEAPON,
    RING,
    POTION
}



import java.util.List;
           //TreasureChestItemIterator
public class TreasureChestItemIterator implements ItemIterator {

    private TreasureChest chest;
    private int idx;
    private ItemType type;

    public TreasureChestItemIterator(TreasureChest chest, ItemType type) {
        this.chest = chest;
        this.type = type;
        this.idx = -1;
    }

    @Override
    public boolean hasNext() {
        return findNextIdx() != -1;
    }

    @Override
    public Item next() {
        idx = findNextIdx();
        if (idx != -1) {
            return chest.getItems().get(idx);
        }
        return null;
    }

    private int findNextIdx() {

        List<Item> items = chest.getItems();
        boolean found = false;
        int tempIdx = idx;
        while (!found) {
            tempIdx++;
            if (tempIdx >= items.size()) {
                tempIdx = -1;
                break;
            }
            if (type.equals(ItemType.ANY)
                    || items.get(tempIdx).getType().equals(type)) {
                break;
            }
        }
        return tempIdx;
    }
}


public class App {

    public static void main(String[] args) {

        TreasureChest chest = new TreasureChest();
        ItemIterator ringIterator = chest.iterator(ItemType.RING);
        while(ringIterator.hasNext())
        {
            System.out.println(ringIterator.next());
        }

        System.out.println("------------");

        ItemIterator potionIterator = chest.iterator(ItemType.POTION);
        while(potionIterator.hasNext())
        {
            System.out.println(potionIterator.next());;
        }

        System.out.println("------------");

        ItemIterator weaponIterator = chest.iterator(ItemType.WEAPON);
        while(weaponIterator.hasNext())
        {
            System.out.println(weaponIterator.next());
        }

        System.out.println("------------");

        ItemIterator it = chest.iterator(ItemType.ANY);
        while(it.hasNext())
        {
            System.out.println(it.next());
        }

    }

}

/*
Ring of shadows
Ring of armor
------------
Potion of courage
Potion of wisdom
Potion of blood
Potion of rust
Potion of healing
------------
Sword of silver +1
Steel halberd
Dagger of poison
------------
Potion of courage
Ring of shadows
Potion of wisdom
Potion of blood
Sword of silver +1
Potion of rust
Potion of healing
Ring of armor
Steel halberd
Dagger of poison
*/






版权声明:本文为博主原创文章,未经博主允许不得转载。

Java设计模式之Iterator模式

  • 2013年07月15日 10:52
  • 8KB
  • 下载

java 设计模式 Iterator 容器与容器遍历

容器 ,不用考虑边界(动态扩展),并且知道长度 所有的容器里都有一个加入方法,和一个 求长度方法 先设定指定大小的数组,一旦装满了,再开辟新的一块空间再继续装 可以用数组或者 链表来实现...

JAVA设计模式-Iterator

Iterator模式JAVA已经在JDK里面帮助我们实现了,使用起来也很容易,看个例子就行了。       [java] view plaincopyprint? pac...

Java设计模式——Iterator迭代器

转自:http://blog.csdn.net/acmman/article/details/43920153 在遍历容器元素的时候,有很多初学者在疑惑,为什么返回一个iterator我就能够去遍历这...

从Java类库看设计模式 (Composite,Strategy,Iterator)

从Java类库看设计模式 (Composite,Strategy,Iterator) 出处 IBM DW  刘武东 (wdliu@chinaren.com) 2...

java设计模式之迭代器 Iterator

1、 意图 提供一种方法顺序访问一个聚合对象中各个元素,而又不需要暴露该对象的内部表示。 2、别名 游标 3、关键思想 迭代器模式的关键思想就是将列表的访问和遍历从列表对...

[016]Java设计模式2——Iterator

Iterator主要针对Java容器设计的,主要目的就是为了解决多种容器统一遍历的问题。每一种容器都有其独特的遍历方式,当使用的容器发生变化的时候,遍历部分的代码也要跟着变化,这样不便于程序的维护,使...

二十三种设计模式(java版)之Iterator

元素: 1、Interator(迭代器) 提供访问和遍历元素的接口。一般包含hasNext和next方法。 2、ConcreteInterator(具体迭代器) 实现迭代器的接口,其中包含容器...
  • DEBUG_0
  • DEBUG_0
  • 2013年03月31日 13:53
  • 398
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java设计模式进阶_iterator
举报原因:
原因补充:

(最多只允许输入30个字)