首页 > 其他分享 >设计模式——迭代器模式

设计模式——迭代器模式

时间:2022-12-19 14:07:02浏览次数:30  
标签:Iterator 迭代 对象 object 模式 aggregate 设计模式 public


一、定义

提供一种方法循序访问一个聚合对象中各个元素,而又不暴露该对象地内部表示

和Foreach in 功能相同

设计模式——迭代器模式_ide

Aggregate类:聚焦抽象类提供创建迭代器地方法

ConcreteAggregatelei:具体聚焦类,继承Aggregate类

Iterator:迭代抽象类,用于定义得到开始对象,得到下一个对象,判断是否到结尾,当前对象等抽象方法,统一接口。

ConcreteIterator类:具体的迭代器类,继承Iterator,实现其中的方法,可以在这儿修改实现不同的遍历方法。

二、特点

可以采用多种方式进行遍历

三、什么时候使用

当你需要访问一个聚集对象,而且不管这些对象是什么都需要遍历地时候,就应该考虑用迭代器模式

四、实例

①、迭代器实现

Iterator类(迭代器抽象类)

abstract class Iterator//用于定义得到开始对象,得到下一个对象、判断是否到结尾、当前随想等抽象方法统一接口
{
public abstract object First();
public abstract object Next();
public abstract bool IsDone();
public abstract object CurrentItem();
}

Aggregate类(聚集抽象类)

abstract  class Aggregate
{
public abstract Iterator CreateIerator();//创建迭代器
}

ConcreteIterator类(具体迭代器,继承Iterator)

class ConcreteIterator:Iterator 
{
private ConcreteAggregate aggregate; //定义一个具体的聚焦对象
private int current = 0;
public ConcreteIterator (ConcreteAggregate aggregate ) //初始化将聚焦对象传入
{
this.aggregate = aggregate;
}
public override object First() //得到第一个聚焦对象
{
return aggregate[0];
}
public override object Next() //得到下一个聚焦对象
{
object ret = null;
current++;
if (current <aggregate.Count)
{
ret = aggregate[current];
}
return ret; //返回一个对象
}
public override bool IsDone() //判断时候遍历到末尾,到末尾返回true
{
return current >= aggregate.Count ?true :false;
}
public override object CurrentItem()
{
return aggregate[current]; //返回当前聚焦对象
}
}

ConcreteAggregate类:(具体聚焦类,继承Aggregate)

class ConcreteAggregate:Aggregate 
{
private IList<object> items = new List<object>(); //声明一个Ilist泛型变量,用于存放聚合对象
public override Iterator CreateIerator( )
{
return new ConcreteIterator(this);
}

public int Count //返回聚合总数
{
get { return items.Count; }
}
public object this[int index] //明一个索引
{
get { return items[index]; }
set { items.Insert(index, value); }
}
}

类图关系

 

设计模式——迭代器模式_迭代器_02

五、涉及知识点

1.关系

依赖:对于两个相对独立的对象,当一个对象负责构造另一个对象的实例,或者依赖另一个对象的服务时,这两个对象之间主要体现为依赖关系。就好比动物依赖氧气和水。

实现:发生依赖关系的两个类都不会增加属性。其中一个类作为另一个类的方法的参数或者返回值,或者是某个方法的变量而已

图形:虚线+箭头

 

关联:对于两个独立的对象当一个对象的实例与另一个对象的一些特定实例存在固定的对应关系时 关系为关联关系。单向关联,双向

实现:发生关联关系的两个类,其中的一个类成为另一个类的属性

图形:实线+箭头

 

2.集合

1.ArrayList

是命名空间System.Collection下的一部分,它是使用大小可按需求动态增的的数组实线IList接口

ArrayList的容量是ArrayList可以保存的元素数。ArrayList的默认初始容量为0,随着元素添加到ArrayLIst中,容量会自动增加。

 

缺点:因为在ArrayLIst眼里所有元素都是object类型,,在使用元素的时候需要进行拆箱,胡进行大量计算。

3.泛型

泛型集合:首先泛型集合需要System.Collection.Generic的命名空间。List类是ArrayList类的泛型等效类。用法的关键就是在IList和list后面加<T>T是之指定集合或对象类型

 

通常情况下都建议使用泛型结合,不必对元素进行装箱。

 

标签:Iterator,迭代,对象,object,模式,aggregate,设计模式,public
From: https://blog.51cto.com/u_15916106/5952244

相关文章

  • 设计模式中的六种关系以及代码之间的对应
    强弱关系:依赖<关联<聚合<组合<实现<继承 一、依赖battle关联依赖定义对于两个相对独立的对象,当一个对象负责构造另一个对象的实例,或者依赖另一个对象的服务时,这两个对象之......
  • Atom 项目仓库正式归档,进入只读模式
    Atom项目仓库正式归档,进入只读模式来源:OSCHINA编辑: 局2022-12-1908:46:00 2GitHub正式归档了Atom项目的代码仓库,目前已进入只读模式。Atom是......
  • Spring Cloud 应用 Proxyless Mesh 模式探索与实践
    作者:十眠ServiceMesh简介ServiceMesh早已不是一个新兴的概念,目前已经有许多关于ServiceMesh的探索以及实践。2016年可以说是ServiceMesh的元年,Buoyant公司CEO......
  • Spring Cloud 应用 Proxyless Mesh 模式探索与实践
    作者:十眠ServiceMesh简介ServiceMesh早已不是一个新兴的概念,目前已经有许多关于ServiceMesh的探索以及实践。2016年可以说是ServiceMesh的元年,Buoyant公司......
  • java之增强for和迭代器精选
    前言:未来这个词听上去就是美好,可是你别忘了呀,每一个我们所期待的美好未来,都必须有一个努力的现在!!!我们上一篇聊到了java之集合,这一篇我们聊一下增强for和迭代器,针对于以下......
  • 【RocketMQ】主从模式下的消费进度管理
    在【RocketMQ】消息的拉取一文中可知,消费者在启动的时候,会创建消息拉取API对象PullAPIWrapper,调用pullKernelImpl方法向Broker发送拉取消息的请求,那么在主从模式下消费者是......
  • 解释器模式
    四则运算问题传统方案解决四则运算问题分析   解释器模式基本介绍解释器模式的原理类图   对原理类图的说明-即(解释器模式的角色及职责)解释器模式来......
  • 单例模式
    单例模式单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法(静态方法)。单例设计模式八种方......
  • C#设计模式之策略模式
    原文链接:https://www.jb51.net/article/239469.htm策略模式所谓策略其实就是做一件事情有很多很多的方法。比如说一个商场要搞促销,促销的方式有可能有很多:打折啊,满100返......
  • 模板方法设计模式
    模板方法设计模式在之前的oa项目中,web.xml是一个臃肿的问题,使用注解开发可以有效解决还有一个比较臃肿的问题,一个servlet单表crud就对应了6个servlet类,这种开发方式,......