Java设计模式之迭代子模式
- public abstract class Aggregate {
- /**
- * 工厂方法,创建相应迭代子对象的接口
- */
- public abstract Iterator createIterator();
- }
- public class ConcreteAggregate extends Aggregate {
- private Object[] objArray = null;
- /**
- * 构造方法,传入聚合对象的具体内容
- */
- public ConcreteAggregate(Object[] objArray){
- this.objArray = objArray;
- }
- @Override
- public Iterator createIterator() {
- return new ConcreteIterator(this);
- }
- /**
- * 取值方法:向外界提供聚集元素
- */
- public Object getElement(int index){
- if(index < objArray.length){
- return objArray[index];
- }else{
- return null;
- }
- }
- /**
- * 取值方法:向外界提供聚集的大小
- */
- public int size(){
- return objArray.length;
- }
- }
- public interface Iterator {
- /**
- * 迭代方法:移动到第一个元素
- */
- public void first();
- /**
- * 迭代方法:移动到下一个元素
- */
- public void next();
- /**
- * 迭代方法:是否为最后一个元素
- */
- public boolean isDone();
- /**
- * 迭代方法:返还当前元素
- */
- public Object currentItem();
- }
- public class ConcreteIterator implements Iterator {
- //持有被迭代的具体的聚合对象
- private ConcreteAggregate agg;
- //内部索引,记录当前迭代到的索引位置
- private int index = 0;
- //记录当前聚集对象的大小
- private int size = 0;
- public ConcreteIterator(ConcreteAggregate agg){
- this.agg = agg;
- this.size = agg.size();
- index = 0;
- }
- /**
- * 迭代方法:返还当前元素
- */
- @Override
- public Object currentItem() {
- return agg.getElement(index);
- }
- /**
- * 迭代方法:移动到第一个元素
- */
- @Override
- public void first() {
- index = 0;
- }
- /**
- * 迭代方法:是否为最后一个元素
- */
- @Override
- public boolean isDone() {
- return (index >= size);
- }
- /**
- * 迭代方法:移动到下一个元素
- */
- @Override
- public void next() {
- if(index < size)
- {
- index ++;
- }
- }
- }
- public class Client {
- public void operation(){
- Object[] objArray = {"One","Two","Three","Four","Five","Six"};
- //创建聚合对象
- Aggregate agg = new ConcreteAggregate(objArray);
- //循环输出聚合对象中的值
- Iterator it = agg.createIterator();
- while(!it.isDone()){
- System.out.println(it.currentItem());
- it.next();
- }
- }
- public static void main(String[] args) {
- Client client = new Client();
- client.operation();
- }
- }
- public abstract class Aggregate {
- /**
- * 工厂方法,创建相应迭代子对象的接口
- */
- public abstract Iterator createIterator();
- }
- public interface Iterator {
- /**
- * 迭代方法:移动到第一个元素
- */
- public void first();
- /**
- * 迭代方法:移动到下一个元素
- */
- public void next();
- /**
- * 迭代方法:是否为最后一个元素
- */
- public boolean isDone();
- /**
- * 迭代方法:返还当前元素
- */
- public Object currentItem();
- }
- public class ConcreteAggregate extends Aggregate {
- private Object[] objArray = null;
- /**
- * 构造方法,传入聚合对象的具体内容
- */
- public ConcreteAggregate(Object[] objArray){
- this.objArray = objArray;
- }
- @Override
- public Iterator createIterator() {
- return new ConcreteIterator();
- }
- /**
- * 内部成员类,具体迭代子类
- */
- private class ConcreteIterator implements Iterator
- {
- //内部索引,记录当前迭代到的索引位置
- private int index = 0;
- //记录当前聚集对象的大小
- private int size = 0;
- /**
- * 构造函数
- */
- public ConcreteIterator(){
- this.size = objArray.length;
- index = 0;
- }
- /**
- * 迭代方法:返还当前元素
- */
- @Override
- public Object currentItem() {
- return objArray[index];
- }
- /**
- * 迭代方法:移动到第一个元素
- */
- @Override
- public void first() {
- index = 0;
- }
- /**
- * 迭代方法:是否为最后一个元素
- */
- @Override
- public boolean isDone() {
- return (index >= size);
- }
- /**
- * 迭代方法:移动到下一个元素
- */
- @Override
- public void next() {
- if(index < size)
- {
- index ++;
- }
- }
- }
- }
客户端类
- public class Client {
- public void operation(){
- Object[] objArray = {"One","Two","Three","Four","Five","Six"};
- //创建聚合对象
- Aggregate agg = new ConcreteAggregate(objArray);
- //循环输出聚合对象中的值
- Iterator it = agg.createIterator();
- while(!it.isDone()){
- System.out.println(it.currentItem());
- it.next();
- }
- }
- public static void main(String[] args) {
- Client client = new Client();
- client.operation();
- }
- }
上面的例子首先创建了一个聚集类实例,然后调用聚集对象的工厂方法createIterator()以得到一个迭代子对象。在得到迭代子的实例后,客户端开始迭代过程,打印出所有的聚集元素。
- 迭代子模式简化了聚集的接口。迭代子具备了一个遍历接口,这样聚集的接口就不必具备遍历接口。
- 每一个聚集对象都可以有一个或多个迭代子对象,每一个迭代子的迭代状态可以是彼此独立的。因此,一个聚集对象可以同时有几个迭代在进行之中。
- 由于遍历算法被封装在迭代子角色里面,因此迭代的算法可以独立于聚集角色变化。
作者:jason0539
博客:http://blog.csdn.net/jason0539(转载请说明出处
转载于:https://www.cnblogs.com/telwanggs/p/6781800.html
Java设计模式之迭代子模式相关推荐
- 【java设计模式】迭代子模式
<JAVA与模式>之迭代子模式 在阎宏博士的<JAVA与模式>一书中开头是这样描述迭代子(Iterator)模式的: 迭代子模式又叫游标(Cursor)模式,是对象的行为模式. ...
- Java 设计模式 Iterator 迭代 模式
Java 设计模式 Iterator 迭代 模式 Iterator模式用于在数据集合中按照顺序遍历集合. 涉及到的角色 迭代器:负责定义按顺序逐个遍历元素的接口. 具体的迭代器:负责实现迭代器角色定义 ...
- Java二十三设计模式之------迭代子模式
一.迭代子模式(Iterator) 顾名思义,迭代器模式就是顺序访问聚集中的对象,一般来说,集合中非常常见,如果对集合类比较熟悉的话,理解本模式会十分轻松.这句话包含两层意思:一是需要遍历的对象,即聚 ...
- 设计模式之迭代子模式
迭代子模式又叫游标(Cursor)模式,是对象的行为模式. 迭代子模式的定义 迭代子模式可以顺序地访问一个聚集中的元素而不必暴露聚集的内部表象.我们常见的集合有很多种类,其顶层数据存储和组织方式的不同 ...
- Java设计模式之五大创建型模式(附实例和详解)
一.概况 总体来说设计模式分为三大类: (1)创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. (2)结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥 ...
- Java设计模式理论知识要点总结
一 设计模式基本知识 1. 定义 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证 ...
- Java设计模式(一) -- 工厂方法模式
java的设计模式大体上分为三大类: •创建型模式(5种):工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模式. •结构型模式(7种):适配器模式,装饰器模式,代理模式,外观模式,桥接模式,组 ...
- Java设计模式详解
设计模式(Design Patterns) --可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...
- Java设计模式、框架、架构、平台之间的关系
1.设计模式 为什么要先说设计模式?因为设计模式在这些概念中是最基本的,而且也比较简单.那么什么是设计模式呢?说的直白点,设计模式就是告诉你针对特定问题如何组织类.对象和接口之间的关系,是前人总结的 ...
最新文章
- php源码安全加密之PHP混淆算法.
- SpringBoot中的自定义路径怎么配置/根目录配置方法
- 【双100%解法】剑指 Offer 24. 反转链表
- 基于easyui开发Web版Activiti流程定制器详解(二)——文件列表
- Eureka Server启动源码分析
- chrome vue插件_不容错过的 Chrome 插件推荐合集-开发者必备篇
- C#中IL反汇编工具的使用 其具体含义如下文
- 软件测试【个人简历】展示模板
- gtp6 linux 启动_glibc.i686安装
- 贴片电容COG、NPO、X7R、Y5V、X5R介质的区别
- 台式计算机怎么设置自动锁屏,台式机win7怎么设置自动锁屏
- 开关电源初级和次级变压器之间的Y电容作用
- 拼多多店铺什么时候推广好?
- 史上最全recyclewView集合,下拉刷新,上拉加载,左滑删除,点击按钮滑动到指定位置
- 网点分布图怎么做,用地图制作客户分布图
- 【软件通信协议】1. 详细解析TCP/IP通信协议
- 怎么将计算机恢复到前一天的状况,excel表格恢复前一天数据-我想将excel表格中的两组数据做对比(数据是每天变......
- Qt美化之基础控件美化
- 「DR老兵寻访」游戏正规军的“万智牌生态”链改计划
- 超级计算机的内部图,中科院首次获得了宇宙中全尺度暗晕内部结构的清晰图像...
热门文章
- 如何解决亚稳态?(FPGA面试题)
- mysql binlog生成异常_mysql binlog故障演练
- 如何通过cmd网站服务器地址,如何用cmd进入服务器地址
- mapreduce分组统计_mongodb中使用mapreduce进行分组统计
- imp 只导入索引_Elasticsearch系列---实战零停机重建索引
- 【C语言】常用字符(string库函数,ctype库函数),字符数组的输入与处理)
- Redis面试之传统五大数据类型的落地应用详解
- javascript基础知识(3) 基本语法
- [Luogu 1312] noip11 Mayan游戏
- WIN7系统程序放在中文文件夹打开报错及界面汉字变乱码