1.设计模式-------Iterator

本文主要是参考《图解设计模式》写的读书笔记;

            开发中我用到遍历集合时候,无非我常用的就是简单的for循环,foreach,iterator 这三种方式进行遍历!

当然这三种的效率:

学习Iterator模式时候,书上给的案例是这样的,一个书架上面放满了书,书下面有个指针!

      大概就这样,画的不好!

      

    首先这书架也就相当于是一个集合,集合中得book就是相当于集合元素,下面的指针就相当于Iterator中得hasNext();

为甚有那么简单的for循环不用,非要搞Iterator干嘛,我第一次时候就这么问的??    

看案例吧:

    1.先编写一个包含了迭代方法的抽象类

package iterator.Method;

public interface Aggregate {
    public  abstract Iterator iterator();
}

  2.编写实体类

  

package iterator.Model;
/**
 *
 * @author zengrong
 *
 */
public class Book {

    private String name;

    public Book(String name) {
        super();
        this.name = name;
    }

    public String getName() {
        return name;
    }

    @Override
    public String toString() {
        return "Book [name=" + name + "]";
    }

}
package iterator.Model;

import iterator.Method.Aggregate;
import iterator.Method.Iterator;
import iterator.Method.IteratorBookshelf;

public class BookShelf implements Aggregate {
    private Book books[];
    //定义指针的位置
    private int last=0;
    //获取数据额书

    public Book  getBookAt(int index) {
        return books[index];
    }
    public BookShelf(int maxsize) {
        this.books=new Book[maxsize];
    }
    //获取长度
    public int getLength() {
        return last;
    }
    //添加书
    public void  appendBook(Book book) {
        this.books[last]=book;
        last++;
    }
    //添加
    @Override
    public Iterator iterator() {

        return new IteratorBookshelf(this);
    }
}

3.编写抽象的iterator

package iterator.Method;
/**
 *
 * @author zengrong
 *    对迭代接口设计二个方法
 */
public interface Iterator {
        public abstract boolean hasNext();
        public abstract Object next();
}

   

package iterator.Method;

import iterator.Model.Book;
import iterator.Model.BookShelf;

/*
 * 遍历书架上面书的类
 */
public  class IteratorBookshelf implements Iterator{
    private BookShelf bookShelf;
    private int index;

    public IteratorBookshelf(BookShelf bookShelf) {
        super();
        this.bookShelf = bookShelf;
    }

    public boolean hasNext() {
        if(index<bookShelf.getLength()){
            return true;
        }else{
        return false;}
    }

    public Object next() {
        Book book = bookShelf.getBookAt(index);
        index++;
        return book ;
    }

}

4 main

package Main;

import iterator.Method.Iterator;
import iterator.Model.Book;
import iterator.Model.BookShelf;

/**
 *
 * @author zengrong
 *  测试
 */
public class App {
    public static void main(String[] args) {
        BookShelf bookShelf=new BookShelf(5);
        Book book =new Book("苍老师日语全集");
        Book book2 =new Book("电影AV无码");
        Book book3 =new Book("小泽从你的全世界路过");
        Book book4 =new Book("自己动手丰衣足食");
        Book book5 =new Book("给我一个杠杆我会撬动你");
        bookShelf.appendBook(book);
        bookShelf.appendBook(book2);
        bookShelf.appendBook(book3);
        bookShelf.appendBook(book4);
        bookShelf.appendBook(book5);

        Iterator it = bookShelf.iterator();
        while(it.hasNext()){
            Book bo = (Book) it.next();
            System.out.println(bo);
        }

    }
}

 

    

时间: 2024-10-15 08:39:08

1.设计模式-------Iterator的相关文章

[C++设计模式] iterator 迭代器模式

迭代器模式定义:提供一种方法顺序访问一个聚合对象中各个元素,而又不需要暴露该对象. 迭代器分内部迭代器和外部迭代器,内部迭代器与对象耦合紧密,不推荐使用.外部迭代器与聚合容器的内部对象松耦合,推荐使用. 迭代器模式就是分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不暴露集合的内部结构,又可让外部代码透明地访问集 合内部的数据.而且,可以同时 定义多个迭代器来遍历,互不冲突. 对于迭代器,参考STL迭代器,只需要使用具体容器的迭代器就可以遍历该容器内的聚合对象,也可以借助迭代器

图解设计模式-Iterator模式

使用抽象类和接口,弱化类之间的耦合,使类可以更容易组件化 不使用具体类编程,要优先使用抽象类和接口编程 角色划分: Iterator迭代器接口,定义遍历元素的接口,hasNext判断是否有下一个.next获得下一个值 ConcreteIterator:迭代器具体的实现类,实现了hasNext.next两个方法,需要根据具体的被迭代对象进行自定. Aggregate集合接口,包含了获得Iterator迭代器的方法 ConcreteAggregate集合的具体实现类,实现了了获得Iterator迭代

Java设计模式之Iterator模式

分类: [java]2013-07-15 10:58 917人阅读 评论(0) 收藏 举报 所谓Iterator模式,即是Iterator为不同的容器提供一个统一的访问方式.本文以java中的容器为例,模拟Iterator的原理.参考:马士兵 Java设计模式 Iterator1.首先定义一个容器Collection接口. [java] view plaincopy package com.njupt.zhb.learn.iterator; public interface Collection

设计模式(博客园精化集)

Web Client Software Factory系列(3):View-Presenter模式作者: TerryLee .NET设计模式(18):迭代器模式(Iterator Pattern)作者: TerryLee .NET设计模式(19):观察者模式(Observer Pattern)作者: TerryLee .NET设计模式(2):单件模式(Singleton Pattern)作者: TerryLee .NET设计模式(3):抽象工厂模式(Abstract Factory)作者: Te

Java 设计模式实现 不错的引用

这段时间有兴趣重新温习一下设计模式在Java中的实现,碰巧看到一个不错的设计模式总结,这里引用一下作为参考. 创建型模式: JAVA设计模式-Singleton JAVA设计模式-Factory JAVA设计模式-Builder JAVA设计模式-Prototype 结构型模式: JAVA设计模式-Adapter JAVA设计模式-Bridge JAVA设计模式-Composite JAVA设计模式-Decorator JAVA设计模式-Facade JAVA设计模式-FlyWeight JAV

[转][osg]探究osg中的程序设计模式【目录】

作者:3wwang 原文接连:http://www.3wwang.cn/html/article_104.html 前序 探究osg中的程序设计模式---开篇 探究osg中的程序设计模式---创造性模式 探究osg中的程序设计模式---创造型模式---Factory(工厂)模式 探究osg中的程序设计模式---创造型模式---AbstractFactory(抽象工厂)模式 探究osg中的程序设计模式---创造型模式---Singleton(单例)模式 探究osg中的程序设计模式---创造型模式-

小白学Java:迭代器原来是这么回事

目录 小白学Java:迭代器原来是这么回事 迭代器概述 迭代器设计模式 Iterator定义的方法 迭代器:统一方式 Iterator的总结 小白学Java:迭代器原来是这么回事 前文传送门:Enumeration 上一篇,我们谈到了那个古老的迭代器Enumeration,还谈到了取代他的新迭代器--Iterator.相比于以往,这个新物种又有哪些优点呢? 迭代器这个词,在没查找许多资料之前,我只知道个大概,我知道它可以用来遍历集合,但是至于它其中的奥妙,并没有做深究.本篇文章关于Iterato

C++设计模式 之 “数据结构” 模式:Composite、Iterator、Chain of Resposibility

"数据结构"模式 常常有一些组件在内部具有特定的数据结构,如果让客户程序依赖这些特定的数据结构,将极大地破坏组件的复用.这时候,将这些特定数据结构封装在内部,在外部提供统一的接口,来实现与特定数据结构无关的访问,是一种行之有效的解决方案. 典型模式 #Composite #Iterator #Chain of Resposibility part 1 Composite 模式 动机 #软件在某些情况下,客户代码过多地依赖于对象容器复杂的内部实现结构,对象容器内部实现结构(而非抽象接口)

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

迭代器模式(iterator pattern) Java 迭代器(Iterator) 详解 本文地址: http://blog.csdn.net/caroline_wendy 参考迭代器模式(iterator pattern): http://blog.csdn.net/caroline_wendy/article/details/35254643 Java的标准库(util)中包含迭代器接口(iterator interface), import java.util.Iterator; 继承(