博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【设计模式】—— 迭代模式Iterator
阅读量:5776 次
发布时间:2019-06-18

本文共 3671 字,大约阅读时间需要 12 分钟。

hot3.png

  前言:【】——————————by xingoo

  模式意图

  提供一个方法按顺序遍历一个集合内的元素,而又不需要暴露该对象的内部表示。

  应用场景

  1 访问一个聚合的对象,而不需要暴露对象的内部表示

  2 支持对聚合对象的多种遍历

  3 对遍历不同的对象,提供统一的接口。

  模式结构

  Iterator 定义访问的接口

/** * 抽象的迭代,有判断结束和下一个,获取当前元素等函数 * @author xingoo * */interface Iterator{    void first();    void next();    boolean isDone();    Object currentItem();}

 

  ConcreteIterator 具体的迭代器,跟踪聚合内的元素

/** * 具体的迭代类 * @author xingoo * */class ConcreteIterator implements Iterator{    private ConreteAggregate agg;    private int index = 0;    private int size = 0;        public ConcreteIterator(ConreteAggregate agg) {        this.agg = agg;        size = agg.size();        index = 0;    }    public void first() {        index = 0;    }    public void next() {        if(index < size){            index++;        }    }    public boolean isDone() {        return (index >= size);    }    public Object currentItem() {        return agg.getElement(index);    }    }

 

  Aggregate 提供聚合的接口

/** * 聚合的类 * @author xingoo * */abstract class Aggregate{    public Iterator createIterator(){        return null;    }}

 

  ConcreteAggregate 具体的聚合

/** * 具体的聚合对象,拥有大小,创建迭代子等函数 * @author xingoo * */class ConreteAggregate extends Aggregate{    private Object[] obj = {
"test1","test2","test3","test4"}; public Iterator createIterator(){ return new ConcreteIterator(this); } public Object getElement(int index){ if(index < obj.length){ return obj[index]; }else{ return null; } } public int size(){ return obj.length; }}

  全部代码

1 package com.xingoo.Iterator; 2 /** 3  * 聚合的类 4  * @author xingoo 5  * 6  */ 7 abstract class Aggregate{ 8     public Iterator createIterator(){ 9         return null;10     }11 }12 /**13  * 抽象的迭代,有判断结束和下一个,获取当前元素等函数14  * @author xingoo15  *16  */17 interface Iterator{18     void first();19     void next();20     boolean isDone();21     Object currentItem();22 }23 /**24  * 具体的聚合对象,拥有大小,创建迭代子等函数25  * @author xingoo26  *27  */28 class ConreteAggregate extends Aggregate{29     private Object[] obj = {
"test1","test2","test3","test4"};30 public Iterator createIterator(){31 return new ConcreteIterator(this);32 }33 public Object getElement(int index){34 if(index < obj.length){35 return obj[index];36 }else{37 return null;38 }39 }40 public int size(){41 return obj.length;42 }43 }44 /**45 * 具体的迭代类46 * @author xingoo47 *48 */49 class ConcreteIterator implements Iterator{50 private ConreteAggregate agg;51 private int index = 0;52 private int size = 0;53 54 public ConcreteIterator(ConreteAggregate agg) {55 this.agg = agg;56 size = agg.size();57 index = 0;58 }59 60 public void first() {61 index = 0;62 }63 64 public void next() {65 if(index < size){66 index++;67 }68 }69 70 public boolean isDone() {71 return (index >= size);72 }73 74 public Object currentItem() {75 return agg.getElement(index);76 }77 78 }79 /**80 * 客户端 使用方法81 * @author xingoo82 *83 */84 public class Client {85 private Iterator it;86 private Aggregate agg = new ConreteAggregate();87 public void operation(){88 it = agg.createIterator();89 while(!it.isDone()){90 System.out.println(it.currentItem().toString());91 it.next();92 }93 }94 public static void main(String[] args) {95 Client client = new Client();96 client.operation();97 }98 }
View Code

  运行结果

test1test2test3test4

 

转载于:https://my.oschina.net/u/204616/blog/545480

你可能感兴趣的文章
Redis学习手册(内存优化)
查看>>
浅尝TensorFlow on Kubernetes
查看>>
springboot系列十 Spring-Data-Redis
查看>>
excel进行矩阵计算
查看>>
iOS: Block的循环引用
查看>>
变量声明提升1
查看>>
树莓派下实现ngrok自启动
查看>>
通过XAML Islands使Windows桌面应用程序现代化
查看>>
Javascript 深入浅出原型
查看>>
Magento XML cheatsheet
查看>>
haproxy mysql实例配置
查看>>
MySQL 8.0 压缩包版安装方法
查看>>
JS prototype 属性
查看>>
iphone-common-codes-ccteam源代码 CCEncoding.m
查看>>
006_mac osx 应用跨屏幕
查看>>
nginx中配置文件的讲解
查看>>
MindNode使用
查看>>
HTTP库Axios
查看>>
CentOS7下安装python-pip
查看>>
陀螺仪主要性能指标
查看>>