迭代子模式:定义

迭代子模式,又称游标模式,是一种用于对聚集进行顺序访问规则的模式,是一种行为模式;它用于提供对聚集对象的一种统一的访问接口,使客户能够在不了解聚集对象内部结构的情况对聚集对象进行访问。它涉及两个部分,一个是聚集对象,一个迭代子对象,迭代对象(Iterator)用于提供访问聚集对象的标题访问方法;

主要组成角色:

  • 抽象迭代子角色:用于定义访问聚集的标准方法
  • 具体迭代子角色:用于实现访问聚集的访问方法
  • 抽象聚集角色:用于定义公共的聚集对象访问方法,主要的有迭代对象,当前元素获取,聚集对象大小;
  • 具体聚集角色:用于实现聚集对象的公共访问;

基础代码:

//抽象聚集对象类
public Collections() {
this.arrs = ['xx'];
this.iterator = function() {
console.log('需要返回一个Iterator对象');
return null;
}; this.size = function() { //Iterator 需要引用
this.arrs.length;
} this.get = function(idx) { //Iterator 需要引用
return this.arrs[idx];
}
}; //迭代对象
public Iterator (colls) {
this.colls = colls;
this.index = 0;
this.next = function() {
if > this.colls.size() //引用
this.index ++ ;
} this.prev = function() {
//if < 0
this.index--;
} this.get = function() {
this.colls.get(this.index); //引用
} //more
}

迭代子模式结构图

实例

1. 抽象迭代角色

function abstractIterator() {
this.prev = functiojn() {
}; this.next = function() { }; this.first = function() { }; this.hasNext = function() { }; this.get = function() { };
}

2. 具体迭代角色

function Iterator(colls) {
this.colls = colls;
this.index = 0;
}; Inteator.prototype = abstractIterator.prototype; Inteator.prototype.prev = function() {
if (this.index > 0)
this.index --;
}; Inteator.prototype.next = function() {
if (this.index < this.colls.size()) {
this.index++;
}
}; Inteator.prototype.first = function() {
this.index = 0;
}; Inteator.prototype.hasNext = function() {
return this.index < this.colls.size();
}; Inteator.prototype.get = function() {
return this.colls.get(this.index);
};

3. 抽象聚集角色

function abstractCollection() {
this.iterator = function() {
return null;
};
}

4. 具体实现聚集角色公共方法

function Collection() {
this.arrars = ['XXX', 'yyy', 'ZZZ'];
}; Collection.prototype = abstractCollection.prototype; Collection.prototype.iterator = function() {
return new Iterator(this);
}; Collection.prototype.size = function() {
return this.arrays.length;
}; Collection.prototype.get = function(index) {
return this.arrays[index];
};

5. 客户端使用

function Client() {
var colls = new Collection();
var iterator = colls.iterator(); for (iterator.hasNext()) {
console.log(iterator.get());
iterator.next();
}
};

其他说明

把聚象对象的访问逻辑统一到迭代对象里,让客户可以不用了解聚象对象的结构,就可以一种统一的方式访问,聚集与业务逻辑的解耦!

[设计模式] javascript 之 迭代子模式的更多相关文章

  1. [设计模式]迭代子模式 Iterator

    迭代子模式又叫做游标cursor模式,是对象的行为模式.迭代子模式可以顺序的访问一个聚集中的元素而不必暴露聚集的内部表象. 迭代子模式被广泛的应用在Java语言的API中的几个设计模式之一.在Java ...

  2. [工作中的设计模式]迭代子模式Iterator

    一.模式解析 迭代子模式又叫游标(Cursor)模式,是对象的行为模式.迭代子模式可以顺序地访问一个聚集中的元素而不必暴露聚集的内部表象 1.迭代子模式一般用于对集合框架的访问,常用的集合框架为lis ...

  3. JAVA设计模式之迭代子模式

    在阎宏博士的<JAVA与模式>一书中开头是这样描述迭代子(Iterator)模式的: 迭代子模式又叫游标(Cursor)模式,是对象的行为模式.迭代子模式可以顺序地访问一个聚集中的元素而不 ...

  4. 设计模式《JAVA与模式》之迭代子模式

    在阎宏博士的<JAVA与模式>一书中开头是这样描述迭代子(Iterator)模式的: 迭代子模式又叫游标(Cursor)模式,是对象的行为模式.迭代子模式可以顺序地访问一个聚集中的元素而不 ...

  5. java设计模式----迭代子模式

    顺序访问聚集中的对象,主要用于集合中.一是需要遍历的对象,即聚集对象,二是迭代器对象,用于对聚集对象进行遍历访问. 迭代子模式为遍历集合提供了统一的接口方法.从而使得客户端不需要知道聚集的内部结构就能 ...

  6. Java设计模式(18)——行为模式之迭代子模式(Iterator)

    一.概述 概念 UML简图 // Aggregate:聚集(集合) 角色 抽象迭代子:定义遍历元素所需要的接口 具体迭代子:实现抽象迭代子接口,保持游标 聚集/具体聚集:定义/实现创建迭代子对象的接口 ...

  7. java设计模式8.迭代子模式、责任链模式、命令模式

    迭代子模式 迭代子模式可以顺序地访问一个聚集中的元素而不必暴露聚集的内部表象.它将迭代逻辑封装到一个独立的迭代子对象中,从而与聚集本身分开.迭代子对象是对遍历的抽象化,不同的聚集对象可以提供相同的迭代 ...

  8. 迭代子模式(Iterator)

    迭代子模式(Iterator) 顾名思义,迭代器模式就是顺序访问聚集中的对象,一般来说,集合中非常常见,如果对集合类比较熟悉的话,理解本模式会十分轻松.这句话包含两层意思:一是需要遍历的对象,即聚集对 ...

  9. IteratorPattern(迭代子模式)

    /** * 迭代子模式 * @author TMAC-J * 聚合:某一类对象的集合 * 迭代:行为方式,用来处理聚合 * 是一种行为模式,用于将聚合本身和操作聚合的行为分离 * Java中的COLL ...

随机推荐

  1. GitHub项目大全

    [微信网页版]: [查看被删的微信好友]https://github.com/0x5e/wechat-deleted-friends [网页版微信API,包含终端版微信及微信机器人]https://g ...

  2. Android成长日记-数据存储之SharedPreferences

    数据篇-SharedPreferences Android的四种存储方式 1. SharedPreferences 2. SQLite 3. Content Provider 4. File ---- ...

  3. Bzoj3004 吊灯

    Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 72  Solved: 46 Description        Alice家里有一盏很大的吊灯.所 ...

  4. COGS103&tyvj1899 [NOIP2002]矩形覆盖

    题目里给的范围是k<=4,但是官方数据并没有k==4的情况,导致一些奇奇怪怪的DP写法也能过.听说标程在k==4的时候有反例,掀桌-.. 难怪COGS上k==4的数据答案是错的. 还是好好写个搜 ...

  5. C#调用c++Dll 结构体数组指针的问题

    参考文章http://blog.csdn.net/jadeflute/article/details/5684687 但是这里面第一个方案我没有测试成功,第二个方案我感觉有点复杂. 然后自己写啦一个: ...

  6. POJ2528Mayor's posters(离散化 + 线段树)

    题目链接: 题意:给定一些高度都相同的海报去贴,问最后能看见几张海报 The picture below illustrates the case of the sample input. { 8,9 ...

  7. 电脑中的Bois是什么

    电脑中的Bois是什么 BOIS= Basic Input/Output System,基本输入输出系统,全称是ROM-BOIS,是只读存储器基本输入/输出系统的简写,它实际是一组被固化到电脑中,为电 ...

  8. JavaScript学习笔记——节点

    javascript-节点属性详解 根据 DOM,HTML 文档中的每个成分都是一个节点. DOM 是这样规定的: 整个文档是一个文档节点 每个 HTML 标签是一个元素节点 包含在 HTML 元素中 ...

  9. 虚拟机NUMA和内存KSM

    KSM技术可以合并相同的内存页,即使是不同的NUMA节点,如果需要关闭跨NUMA节点的内存合并,设置/sys/kernel/mm/ksm/merge_across_nodes参数为0.或者可以关闭特定 ...

  10. thinkphp 语言包丢失

    Thinkphp 语言包丢失 造成的原因有那些 1.复制模板 预览时内容出现英文状态 如:show.html 解决:找到lang ,在zh-cn 复制想对应的文件包 改下名称就有可以 如:admin_ ...