设计模式(1) -- 迭代模式

    Iterator(迭代器)接口在Java中可以用来嵌入对象当中来实现具体应用,在设计模式中强调的是"低耦合","高复用","不要用具体代码来编程,要优先使用接口和抽象类来编程。"

    这个实例当中不管BookShelf如何变化,只要BookShelf类可以返回重写了Iterator方法(hasNext,Next)的BookShelfIterator类,无论改成数组还是集合测设代码都可以正常运转,这便是组件化,当一个组件发生改变时,可以不用修改其他组件或者很小改动。

    实例:

      集合接口:

package com.book;

import java.util.Iterator;

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

       书类:

    package com.book;

public class Book {
        private    String BookName;

        public String getBookName() {
            return BookName;
        }

        public void setBookName(String bookName) {
            BookName = bookName;
        }

}

  

    书架类:

package com.book;

import java.util.Iterator;
//书架类
public class BookShelf  implements Aggregate{
        //定义数组
    private Book[]    Books;
        //定义指针
    private    int last = 0;
    //初始化书架
    public BookShelf(int maxSize) {
        this.Books = new Book[maxSize];
    }
    //获取下标
    public Book getBookAt(int index) {
        return Books[index];
    }
    //添加图书
    public void appendBook(Book book) {
        Books[last] = book;
        last++;
    }
    //获取长度
    public int getLength() {
        return last;
    }

    @Override
    public Iterator iterator() {
        // TODO Auto-generated method stub
        return new BookSelfIterator(this);
    }

}

    书架迭代:

package com.book;

import java.util.Iterator;

public class BookSelfIterator implements Iterator{
    //定义一个书架
    private BookShelf bookSelf;
    //定义下标
    private int index;

    //初始化
    public BookSelfIterator(BookShelf bookShelf) {
        this.bookSelf = bookShelf;
        index = 0;
    }

    @Override
    public boolean hasNext() {
        // TODO Auto-generated method stub
        if(index<bookSelf.getLength()) {
            return true;
        }else {
        return false;
        }
    }

    @Override
    public Object next() {
        // TODO Auto-generated method stub
        Book book = bookSelf.getBookAt(index);
        index++;
        return book;
    }

}

   测试:

package com.book;

public class TextMain {
    public static void main(String[] args) {
        BookShelf bookShelf = new BookShelf(6);
        Book book_1 = new Book();
        Book book_2 = new Book();
        Book book_3 = new Book();
        book_1.setBookName("图解设计模式");
        book_2.setBookName("鸟歌的Linux私房菜");
        book_3.setBookName("算法导论");
        bookShelf.appendBook(book_1);
        bookShelf.appendBook(book_2);
        bookShelf.appendBook(book_3);;
        BookSelfIterator bookShelfIterator  = new BookSelfIterator(bookShelf);
        while(bookShelfIterator.hasNext()) {
            Book book = (Book) bookShelfIterator.next();
            System.out.println(book.getBookName());
        }
    }
}

原文地址:https://www.cnblogs.com/yangchaojie/p/8146724.html

时间: 2024-11-08 23:55:53

设计模式(1) -- 迭代模式的相关文章

【设计模式】——迭代模式

前言: 迭代,从字面的意思就可以了解到,是一个接着一个.比如公交车上的售票员,在每一个站 过后都会对上来的乘客进行遍历一遍,不会放过一个不买票的乘客,不管你是人,过大的行李, 不管你是中国人还是外国人,不管你是内部员工,甚至哪怕是马上要抓走的小偷,只要是来乘车 的乘客,就必须要买票.同样的道理,当你需要访问一个聚集的对象,而且不管这些对象是什 么,都要遍历的时候,你就应该考虑用迭代器模式. 由于不管乘客是什么,售票员的做法始终是相同的,都是从第一个开始,下一个是谁,是否 接受,当前售到那个人,谢

【设计模式】—— 迭代模式Iterator

前言:[模式总览]——————————by xingoo 模式意图 提供一个方法按顺序遍历一个集合内的元素,而又不需要暴露该对象的内部表示. 应用场景 1 访问一个聚合的对象,而不需要暴露对象的内部表示 2 支持对聚合对象的多种遍历 3 对遍历不同的对象,提供统一的接口. 模式结构 Iterator 定义访问的接口 /** * 抽象的迭代,有判断结束和下一个,获取当前元素等函数 * @author xingoo * */ interface Iterator{ void first(); voi

java设计模式--行为型模式--迭代模式

1 迭代器模式 2 概述 3 给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子. 4 5 6 适用性 7 1.访问一个聚合对象的内容而无需暴露它的内部表示. 8 9 2.支持对聚合对象的多种遍历. 10 11 3.为遍历不同的聚合结构提供一个统一的接口(即,支持多态迭代). 12 13 14 参与者 15 1.Iterator 16 迭代器定义访问和遍历元素的接口. 17 18 2.ConcreteIterator 19 具体迭代器实现迭代器接口.

设计模式 - 迭代模式(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; 继承

大话设计模式笔记 组合模式 迭代模式 单例模式

组合模式(Composite),将对象组合合成树形以表示“部门整体”的层次结构.组合模式使得用户对单个对象和组合对象的使用具有一致性. 一句话说就是利用树这种数据结构储存对象. 迭代模式(Iterator),提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示. 数据结构内容. 单例模式(Singleton),保证一个类仅有一个实例,并提供一个访问他的 全局访问点. efficient java 中已经详细介绍了

《Java设计模式》之迭代模式

迭代子模式又叫游标(Cursor)模式,是对象的行为模式.迭代子模式可以顺序地访问一个聚集中的元素而不必暴露聚集的内部表象(internal representation). 聚集和JAVA聚集 多个对象聚在一起形成的总体称之为聚集(Aggregate),聚集对象是能够包容一组对象的容器对象.聚集依赖于聚集结构的抽象化,具有复杂化和多样性.数组就是最基本的聚集,也是其他的JAVA聚集对象的设计基础. JAVA聚集对象是实现了共同的java.util.Collection接口的对象,是JAVA语言

Java设计模式(二)——迭代模式

迭代模式的基本定义:对于一组对象集合(数组.堆栈.列表或散列),用户无需关心它的底层实现而能够通过调用统一接口遍历当中的所有元素.由于jdk已经对常见的迭代模式实现了封装,本文直接提供Collection和Iterator两个接口的模拟. 定义Iterator接口 /* * 设计迭代接口 */ public interface Iterator<E> { // 测试是否有下一个元素 boolean hasNext(); // 返回下一个元素 E next(); } Iterator.java

设计模式之备忘录模式(Memento)摘录

23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而一个对象创建型模式将实例化委托给另一个对象.创建型模式有两个不断出现的主旋律.第一,它们都将关于该系统使用哪些具体的类的信息封装起来.第二,它们隐藏了这些类的实例是如何被创建和放在一起的.整个系统关于这些对象所知道的是由抽象类所定义的接口.因此,创建型模式在什么被创建,谁创建它,它是怎样被创建的,以

Java设计模式之迭代子模式

本文继续介绍23种设计模式系列之观察者模式. 定义 在软件构建过程中,集合对象内部结构常常变化各异,但对于这些集合对象,我们希望在不暴露其内部结构的同时,可以让外部客户代码透明地访问其中包含的元素:同时这种"透明遍历"也为同一种算法在多种集合对象上进行操作提供了可能. 使用面向对象技术将这种遍历机制抽象为"迭代器对象"为"应对变化中的集合对象"提供了一种优雅的方式. 迭代子(Iterator)模式又叫游标(Cursor)模式,是对象的行为模式.迭