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的设计模式

今天看了“Thinking in java”Inner class章节,对Iterator的设计模式有了一点感悟,这里结合自己的拙见分享给感兴趣的各位。...
  • lcc921528642
  • lcc921528642
  • 2015年06月11日 21:34
  • 342

设计模式之Iterator:简单模拟java中集合类的实现

Iterator模式也叫迭代模式,是由GoF提出的23种设计模式的一种。Iterator模式指对容器中包含的内部对象的访问委让给外部类,使用Iterator(遍历)按顺序进行遍历访问的设计模式。 ...
  • zhoujing_0424
  • zhoujing_0424
  • 2015年10月08日 10:57
  • 728

设计模式(十九)iterator(于C++过时)

使用场景: 1.对于集合对象,不暴露内部结构时,可以让外部客户透明的访问其中包含的元素 2.同时使得同一种算法能够在多种集合对象上进行操作 定义:提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴...
  • wxf2012301351
  • wxf2012301351
  • 2017年07月11日 20:21
  • 139

C++设计模式——Iterator模式

关于迭代器模式迭代器模式属于行为型模式的一种,用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。意图:提供一种方法顺序访问一个聚合对象中各个元素,而又无需暴露该对象的内部表示。 主要解决的问...
  • s_lisheng
  • s_lisheng
  • 2017年08月09日 09:47
  • 176

LevelDB 设计模式 Iterator模式

LevelDB 设计模式 Iterator模式flyfish 2015-10-9 Iterator模式(迭代器) 对象行为型模式 意图 提供一种方法顺序访问一个聚合对象中各个元素, 而又不需...
  • flyfish1986
  • flyfish1986
  • 2015年10月09日 10:27
  • 740

设计模式 - 迭代器模式(iterator pattern) 详解

迭代器模式(iterator pattern) 详解本文地址: http://blog.csdn.net/caroline_wendy迭代器模式(iterator pattern) : 提供一种方法顺...
  • u012515223
  • u012515223
  • 2014年06月27日 14:03
  • 1909

Java技术——Iterator和Enumeration的不同

Iterator和Enumeration的不同(1)函数接口不同。Enumeration只有2个函数接口,通过Enumeration我们只能读取集合的数据,而不能对数据进行修改。 Iterator只有...
  • SEU_Calvin
  • SEU_Calvin
  • 2016年10月27日 22:01
  • 5069

java集合18--Iterator和Enumeration比较

概要这一章,我们对Iterator和Enumeration进行比较学习。内容包括: 第1部分 Iterator和Enumeration区别 第2部分 Iterator和Enumeration实...
  • wangxiaotongfan
  • wangxiaotongfan
  • 2016年05月08日 16:34
  • 532

设计模式 - 适配器模式(adapter pattern) 枚举器和迭代器 详解

适配器模式(adapter pattern) 枚举器和迭代器 详解本文地址: http://blog.csdn.net/caroline_wendy参考适配器模式(adapter pattern): ...
  • u012515223
  • u012515223
  • 2014年06月17日 15:17
  • 2003

java设计模式进阶_execute-around

// // // Generated by StarUML(tm) Java Add-In // // @ Project : Untitled // @ File Name : FileWri...
  • wwww_com
  • wwww_com
  • 2016年09月01日 15:54
  • 1429
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java设计模式进阶_iterator
举报原因:
原因补充:

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