迭代子模式:定义

迭代子模式,又称游标模式,是一种用于对聚集进行顺序访问规则的模式,是一种行为模式;它用于提供对聚集对象的一种统一的访问接口,使客户能够在不了解聚集对象内部结构的情况对聚集对象进行访问。它涉及两个部分,一个是聚集对象,一个迭代子对象,迭代对象(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. Bzoj3004 吊灯

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

  2. HDU 1754 I Hate It

    I Hate It Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  3. dedecms /member/reg_new.php SQL Injection Vul

    catalog . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 Dedecms会员中心注入漏洞 2. 漏洞触发条件 http://127 ...

  4. androidstudio 常用快捷键

    ctrl+p  查看需要输入的函数列表 ctrl+h  查看继承关系 ctrl +w   选择一个,一行,一段. alter+enter  内容助理 ctrl+q   查看方法注解 相当于 hover ...

  5. C# List根据某一字段排序 将字段相同的排序到一起

    List<JZJLXQ_Prescription_Item> ciList = new List<JZJLXQ_Prescription_Item>(); List<JZ ...

  6. HDU 1213 How Many Tables(并查集)

    传送门 Description Today is Ignatius' birthday. He invites a lot of friends. Now it's dinner time. Igna ...

  7. python中%和format

    两者都是格式化字符串用的,前者是比较老的版本,现在已经不推荐,后者更强大一些 % In [22]: print '%s' % 'hello world' hello world In [23]: pr ...

  8. iOS - 果冻效果

    具体使用的CADisplayLink和贝塞尔曲线 下载地址:https://github.com/nLoser/CustomAnimation 效果: // // DisplayView.m // C ...

  9. python不同模式打开文件的完全列表

    模式 描述 r 以只读方式打开文件.文件的指针将会放在文件的开头.这是默认模式. rb 以二进制格式打开一个文件用于只读.文件指针将会放在文件的开头.这是默认模式. r+ 打开一个文件用于读写.文件指 ...

  10. JavaScript中的事件对象

    JavaScript中的事件对象 JavaScript中的事件对象是非常重要的,恐怕是我们在项目中使用的最多的了.在触发DOM上的某个事件时,会产生一个事件对象event,这个对象中包含这所有与事件有 ...