迭代器——对象行为模式
来源:互联网 发布:java面向对象定义 编辑:程序博客网 时间:2024/06/07 09:02
意图
又叫做游标(Cursor)模式。提供一种方法访问一个容器(container)对象中各个元素,而又不需暴露该对象的内部细节。
适用性
- 访问一个聚合对象的内容而无需暴露它的内部表示;
- 支持对聚合对象的多种遍历(从前到后,从后到前);
- 为遍历不同的聚合结构提供一个统一的接口,即支持多态迭代。
结构图
角色
Iterator:定义迭代器访问和遍历元素的接口;
ConcreteIterator:实现具体的迭代器;
Aggregate:定义的容器,创建相应迭代器对象的接口;
ConcreteAggregate:具体的容器实现创建相应迭代器的接口,该操作返回ConcreteIterator的一个适当的实例。
实现
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace Iterator{ /*Iterator迭代器抽象类*/ abstract class Iterator { public abstract object First(); public abstract object Next(); public abstract object CurrentItem(); public abstract bool IsDone(); } /*Aggregate聚集抽象类*/ abstract class Aggregate { public abstract Iterator createIterator(); } 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() { return current >= aggregate.Count ? true : false; } // 返回当前聚集对象 public override object CurrentItem() { return aggregate[current]; } } class ConcreteAggregate : Aggregate { private IList<object> items = new List<object>(); public override Iterator createIterator() { 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); } } }}
客户端
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace Iterator{ class Program { static void Main(string[] args) { ConcreteAggregate ca = new ConcreteAggregate(); ca[0] = "大鸟"; ca[1] = "小菜"; ca[2] = "行李"; ca[3] = "老外"; ca[4] = "公交内部员工"; ca[5] = "小偷"; Iterator i = new ConcreteIterator(ca); object obj = i.First(); while (!i.IsDone()) { Console.WriteLine("{0} 请买车票!",i.CurrentItem()); i.Next(); } Console.Read(); } }}
总结
迭代器模式(Iterator)就是分离了聚合对象的遍历行为,抽象出一个迭代器来负责这样既可以做到不暴露集合的内部结构,又可让外部代码透明的访问集合内部数据。
0 0
- 迭代器——对象行为模式
- 迭代器模式——对象行为型模式
- 对象行为型模式——迭代器模式(Iterator)
- 策略模式——对象行为模式
- 职责链——对象行为模式
- Command——对象行为模式
- 中介者——对象行为模式
- 备忘录——对象行为模式
- 观察者——对象行为模式
- 状态——对象行为模式
- 模板方法——对象行为模式
- 访问者——对象行为模式
- 对象行为模式——中介者模式(Mediator)
- 对象行为模式——观察者模式(Observer)
- 对象行为模式——策略模式(Strategy)
- 策略模式(Strategy)——对象行为型模式
- 浅谈设计模式——对象的行为模式
- 责任链模式——对象行为型模式
- Eclipse插件开发Facet
- 哈希表与哈希函数 C实现
- c++11新特性 auto的使用
- Google Earth谷歌地球卫片下载器
- git使用GPG进行签名
- 迭代器——对象行为模式
- 动画状态机--动画片段添加事件
- Hadoop入门简介
- 纯手写的 javascript 万年历控件,复制代码就可以用
- Watershed函数
- spring 框架的xml文件如何读取properties文件数据
- iOS中UIWebView的使用
- 一个网页通用的测试用例
- 华为上机试题6(时间相加)