IteratorPattern(迭代子模式)

/**
 * 迭代子模式
 * @author TMAC-J
 * 聚合:某一类对象的集合
 * 迭代:行为方式,用来处理聚合
 * 是一种行为模式,用于将聚合本身和操作聚合的行为分离
 * Java中的COLLECT就是一种聚合,Iterator类是一种迭代
 * 好处:分开了行为和本身,便于行为的扩展和本身的维护,符合开闭原则
 * 分为白盒(宽接口)和黑盒(窄接口)
 * 白盒:白盒提供了一些可以访问聚合内部的方法,如getSize,add,remove等等
 * 黑盒:不提供或者提供很少外部访问的方法,对外部透明,就像一个黑盒,从外面看不到里面
 * 一般而言聚合可以提供一些工厂方法或者抽象工厂来创建不同的迭代
 * 下面的例子用黑盒来说明,因为我觉得黑盒相比于白盒来说分离的更开,耦合降为最低
 */
public class IteratorPattern {

    abstract  class Aggregate {  

        private Object[] objs;

        public Aggregate(Object[] objs ) {
            this.objs = objs;
        }

        /**
         *  只提供Iterator的工厂方法,没有暴露其他方法给外部
         */
        abstract Iterator createIterator();  

    }  

    interface Iterator{

        void add(Object obj);

        void remove();

        int getSize();

    }

    public class ConcreteAggregate extends Aggregate{

        public ConcreteAggregate(Object[] objs) {
            super(objs);

        }

        @Override
        Iterator createIterator() {
            return new ConcreteIterator(this);
        }

    }

    public class ConcreteIterator implements Iterator{

        private int size;//aggregate的大小

        private int position;//指针(当时学的数据结构终于有用了.....)

        private Aggregate aggregate;

        public ConcreteIterator(Aggregate aggregate) {
            this.aggregate = aggregate;
        }

        @Override
        public synchronized void add(Object obj) {
            if(position<size){
                aggregate.objs[position] = obj;
                position++;
                size++;
            }
            else{
                System.out.println("当前聚合已满!");//正常情况下这里要写一个日志类...但太麻烦了,就不写了
            }
        }

        @Override
        public synchronized void remove() {
            if(position>0){
                aggregate.objs[position-1] = null;
                position--;
                size--;
            }
            else{
                System.out.println("当前聚合为空!");
            }
        }

        @Override
        public int getSize() {
            if(aggregate!=null)return aggregate.objs.length;
            return 0;
        }

    }

    public void test(){
        Object[] numbers = {1,2,3,4,5};
        Aggregate aggregate = new ConcreteAggregate(numbers);
        Iterator iterator = aggregate.createIterator();
        iterator.add(1);
        iterator.remove();
        iterator.getSize();
    }

}
时间: 2025-01-22 03:01:27

IteratorPattern(迭代子模式)的相关文章

迭代子模式(Iterator)

迭代子(Iterator)模式又叫游标模式,是对象的行为模式.迭代子模式可以顺序地访问一个聚集中的元素而不必暴露聚集的内部表象. 迭代子模式涉及到以下几个角色: 抽象迭代子(Iterator)角色:此抽象角色定义出遍历元素所需的接口. 具体迭代子(ConcreteIterator)角色:此角色实现了Iterator接口,并保持迭代过程中的游标位置. 聚集(Aggregate)角色:此抽象角色给出创建迭代子(Iterator)对象的接口. 具体聚集(ConcreteAggregate)角色:实现了

《JAVA与模式》之迭代子模式

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

Java设计模式之迭代子模式

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

java设计模式----迭代子模式

顺序访问聚集中的对象,主要用于集合中.一是需要遍历的对象,即聚集对象,二是迭代器对象,用于对聚集对象进行遍历访问. 迭代子模式为遍历集合提供了统一的接口方法.从而使得客户端不需要知道聚集的内部结构就能就能对聚集进行遍历等操作.Iterator模式是用于遍历集合类的标准访问方法.它可以把访问逻辑从不同类型的集合类中抽象出来,从而避免向客户端暴露集合的内部结构. 例如,如果没有使用Iterator,遍历一个数组的方法是使用索引: for(int i=0; i<array.size(); i++) {

设计模式 之 迭代子模式

设计模式 之 迭代子模式 迭代子模式又叫游标(Cursor)模式,是对象的行为模式.迭代子模式可以顺序地访问一个聚集中的元素而不必暴露聚集的内部表象 --阎宏博士的<JAVA与模式> 例:集合的遍历 第一版:实现数组集合和链表集合 集合接口 public interface MyCollection { void add(Object o); int size(); } 数组集合 public class MyArrayList implements MyCollection { privat

迭代子模式

概述: Java对迭代子模式的支持来自于Java聚集的需要,一个聚集需要向外界提供遍历聚集元素的方法.提供一种方法来让别人可以访问它的元素,而又不需要暴露它的内部结构 迭代器模式:使用迭代器模式来提供对聚合对象的统一存取,即提供一个外部的迭代器来对聚合对象进行访问和遍历 , 而又不需暴露该对象的内部结构.又叫做游标(Cursor)模式 . 适用性 迭代器模式可用来: ? 访问一个聚合对象的内容而无需暴露它的内部表示. ? 需要为聚合对象提供多种遍历方式. ? 为遍历不同的聚合结构提供一个统一的接

[设计模式]迭代子模式 Iterator

迭代子模式又叫做游标cursor模式,是对象的行为模式.迭代子模式可以顺序的访问一个聚集中的元素而不必暴露聚集的内部表象. 迭代子模式被广泛的应用在Java语言的API中的几个设计模式之一.在Java语言的聚集(Collection)框架中,广泛使用迭代子模式来便利聚集的元素. 聚集与Java聚集 多个对象聚集在一起形成的总体称之为聚集(Aggregate),聚集对象是能够包容一组对象的容器对象.数组就是最基本的聚集,也是其他Java聚集对象的设计基础. Java Collection对象是实现

迭代模式

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

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

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