博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式梳理——迭代器模式
阅读量:4096 次
发布时间:2019-05-25

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

一、概述

       迭代器模式(Iterator),提供一个方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示 。

二、UML图示

三、代码实现

1、迭代器抽象类

public abstract class Iterator {    public abstract Object first();    public abstract Object next();    public abstract boolean isDone();    public abstract Object currentItem();}

2、聚集抽象类

public abstract class Aggregate {    public abstract Iterator createIterator();}

3、具体迭代器

public class ConcreteIterator extends Iterator {    private ConcreteAggregate concreteAggregate;    private int current = 0;    public ConcreteIterator(ConcreteAggregate concreteAggregate) {        this.concreteAggregate = concreteAggregate;    }    @Override    public Object first() {        return concreteAggregate.getObject(0);    }    @Override    public Object next() {        Object o = null;        current++;        if(current < concreteAggregate.count()){            o = concreteAggregate.getObject(current);        }        return o;    }    @Override    public boolean isDone() {        return current >= concreteAggregate.count()?true:false;    }    @Override    public Object currentItem() {        return concreteAggregate.getObject(current);    }}

4、具体聚集类

public class ConcreteAggregate extends Aggregate {    private List list = new ArrayList<>();    @Override    public Iterator createIterator() {        return new ConcreteIterator(this);    }    public int count(){        return list.size();    }    public Object getObject(int index) {        return list.get(index);    }    public void setObject(int index,Object o) {        this.list.add(index,o);    }}

5、测试类

public class Test {    public static void main(String[] args) {        ConcreteAggregate concreteAggregate = new ConcreteAggregate();        concreteAggregate.createIterator();        concreteAggregate.setObject(0,"张三");        concreteAggregate.setObject(1,"李四");        concreteAggregate.setObject(2,"王五");        Iterator iterator = new ConcreteIterator(concreteAggregate);        Object o = iterator.first();        while (!iterator.isDone()){            System.out.println(iterator.currentItem()+":请买车票!");            iterator.next();        }    }}输出:张三:请买车票!李四:请买车票!王五:请买车票!

注:参考文献《大话设计模式》程杰著。

你可能感兴趣的文章
我觉得嵌入式面试三要素:基础吃透+项目+大量刷题,缺一不可。不刷题是不行的。而且得是大量刷,刷出感觉套路,别人做题都做得是固定题型套路条件反射了,你还在那慢慢理解慢慢推是不行的,也是考研的教训。
查看>>
React Native之原理浅析
查看>>
Git操作清单
查看>>
基础算法
查看>>
前端面试
查看>>
Flutter Boost的router管理
查看>>
Vue全家桶+Mint-Ui打造高仿QQMusic,搭配详细说明
查看>>
React Native应用部署/热更新-CodePush最新集成总结(新)
查看>>
react-native-wechat
查看>>
基于云信的react-native聊天系统
查看>>
网易云音乐移动客户端Vue.js
查看>>
ES7 await/async
查看>>
ES7的Async/Await
查看>>
React Native WebView组件实现的BarCode(条形码)、(QRCode)二维码
查看>>
每个人都能做的网易云音乐[vue全家桶]
查看>>
Vue2.0全家桶仿腾讯课堂(移动端)
查看>>
React+Redux系列教程
查看>>
19 个 JavaScript 常用的简写技术
查看>>
iOS应用间相互跳转
查看>>
iOS开发之支付宝集成
查看>>