迭代子模式:定义

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

    codeblocks默认只有一种配色方案, 不过我们可以手动添加. 在终端下输入如下命令: cd ~/.codeblocks sudo gedit default.conf 在打开的配置文件中, 找到 ...

  2. Java多线程实践

    1.实现Runnable接口 import java.util.Random; public class PrintTask implements Runnable{ private final in ...

  3. RabbitMQ Queue分发多个Consumer

    多个Consumer的消息分发 之前讲过一个queue对应一个consumer的小例子, 但是在实际项目中,一个consumer肯定是不够的,queue中的消息过多.一个consumer明显会处理过慢 ...

  4. scala break & continue

    Scala没有提供break和continue,我们可以自己实现一个,参考例子: import util.control.Breaks._ object BreakDemo { def main(ar ...

  5. python中join和split函数

    一个是分割,一个是连接. 惯例,先看内部帮助文档 Help on method_descriptor: join(...) S.join(iterable) -> string Return a ...

  6. primefaces 上传文件尺寸受限制 Connection terminated as request was larger than

    standalone.xml like this: <http-listener name="default" socket-binding="http" ...

  7. 京东分布式MySQL集群方案介绍

    背景 数据库作为一个非常基础的系统,任何一家互联网公司都会使用,数据库产品也很多,有Oracle.SQL Server .MySQL.PostgeSQL.MariaDB等,像SQLServer/Ora ...

  8. UrlEncode编码/UrlDecode解码 - 站长工具

    http://tool.chinaz.com/tools/urlencode.aspx

  9. 9月20日下午JavaScript函数--递归

    例题1:公园里有200个桃子,猴子每天吃掉一半以后扔掉一个,问6天以后还剩余多少桃子? var sum = 200; for(var i= 0;i<6;i++) { sum = parseInt ...

  10. pickle模块简单使用

    import pickle with open("school_info","wb") as school: user_input = str(input(&q ...