设计模式:行为类之迭代器模式(Iterator)意图场景和代码示例

设计模式:行为类之迭代器模式(Iterator)意图场景和代码示例导引本篇快速地讲解一下设计模式中行为类的迭代器模式。快速来掌握一下其意图场景及代码结构模式。模式意图提供一个方法按顺序遍历一个集合内的元素,而又

欢迎大家来到IT世界,在知识的湖畔探索吧!

导引

本篇快速地讲解一下设计模式中行为类的迭代器模式(Iterator Pattern),快速来掌握一下其意图场景及代码结构模式。

模式意图

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

应用场景

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

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

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

模式结构

设计模式:行为类之迭代器模式(Iterator)意图场景和代码示例

迭代器模式组成结构示意图

代码构成

Iterator 定义访问的接口

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

欢迎大家来到IT世界,在知识的湖畔探索吧!

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

欢迎大家来到IT世界,在知识的湖畔探索吧!/**
 * 具体的迭代类
 * @author admin
 *
 */
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 admin
 *
 */
abstract class Aggregate{
 public Iterator createIterator(){
 return null;
 }
}

ConcreteAggregate 具体的聚合

欢迎大家来到IT世界,在知识的湖畔探索吧!/**
 * 具体的聚合对象,拥有大小,创建迭代子等函数
 * @author admin
 *
 */
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;
 }
}

完整代码

package com.nd.Iterator;
 /**
 * 聚合的类
 * @author admin
 *
 */
 abstract class Aggregate{
 public Iterator createIterator(){
 return null;
 }
 }
 /**
 * 抽象的迭代,有判断结束和下一个,获取当前元素等函数
 * @author admin
 *
 */
 interface Iterator{
 void first();
 void next();
 boolean isDone();
 Object currentItem();
 }
 /**
 * 具体的聚合对象,拥有大小,创建迭代子等函数
 * @author admin
 *
 */
 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;
 }
 }
 /**
 * 具体的迭代类
 * @author admin
 *
 */
 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);
 }
 
 }
 /**
 * 客户端 使用方法
 * @author admin
 *
 */
 public class Client {
 private Iterator it;
 private Aggregate agg = new ConreteAggregate();
 public void operation(){
 it = agg.createIterator();
 while(!it.isDone()){
 System.out.println(it.currentItem().toString());
 it.next();
 }
 }
 public static void main(String[] args) {
 Client client = new Client();
 client.operation();
 }
 }

运行结果

test1
test2
test3
test4

总结

本篇是关于迭代器模式的简明扼要的介绍,主要是掌握好其意图场景和代码实现的结构模式。当然,还可以有各种迭代的具体实现,比如指定范围迭代等——主要是基于工具的需要或实际业务的需要来具体考量其实现。代码简单明了。

那本篇到此为止,助你学习进步,天天开心。

设计模式:行为类之迭代器模式(Iterator)意图场景和代码示例

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/33611.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信