javascript设计模式学习之七——迭代器模式

一、迭代器模式定义

迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素,并且不需要暴露该对象的内部表示。

在当前大部分语言中,都已经内置了迭代器模式。迭代器有内部迭代器和外部迭代器之分,一般现有语言中实现的大多是内部迭代器。

二、jquery中的each实现

    //类似jquery中的each迭代器
    $.each=function(obj,callback){
        var value,
        i=0,
        isArray=isArrayLike(obj),
        length=obj.length;
        if(isArray){
            for(i=0,i<length;i++){
                value=callback.call(obj,i,obj[i]);
                if(value==false){
                    break;
                }
            }
        }else{
            for(i in obj){
                value=callback.call(obj,i,obj[i]);
                if(value==false){
                    break;
                }
            }
        }
        return obj;
    };
    

三、一个外部迭代器实现

    var Iterator=function(obj){
        var current=0;
        var next=function(){
            current+=1;
        };
        var isDone=function(){
            return current>=obj.length;
        };
        var getCurrentItem=function(){
            return obj[current];
        };
        return{
            next:next,
            isDone:isDone,
            getCurrentItem:getCurrentItem
        };
    };
时间: 2024-11-17 21:01:17

javascript设计模式学习之七——迭代器模式的相关文章

Java设计模式学习记录-迭代器模式

前言 这次要介绍的是迭代器模式,也是一种行为模式.我现在觉得写博客有点应付了,前阵子一天一篇,感觉这样其实有点没理解透彻就写下来了,而且写完后自己也没有多看几遍,上次在面试的时候被问到java中的I/O的各种实现用到了什么设计模式,我愣是想半天没想出来了,人家还给提示了我也没想出来,最后还是面试官给出的答案,是装饰模式,听到答案后就恍然大悟了,前两天刚看了装饰模式,还写下了I/O操作中的各种类都是用到了装饰模式,后来想想两方面原因造成的当时没回答出来,一是面试时紧张就容易想不起来,二是对设计模式

javascript设计模式学习之六——代理模式

一.代理模式定义 代理模式的关键是:当客户不方便直接访问一个对象或者不满足需要的时候,提供一个替身对象来控制对这个对象的访问.代理模式需要和本体对外提供相同的接口,对用户来说是透明的.代理模式的种类有很多,诸如防火墙代理,保护代理(帮助过滤掉一些请求,控制不同权限的对象对目标对象的访问),虚拟代理(将一些开销很大的对象,延迟到真正需要的时候才创建),缓存代理等.在javascript中使用较多的是虚拟代理. 二.虚拟代理实现图片预加载 在这个例子中,不使用虚拟代理固然也能够解决问题,不过采用虚拟

设计模式学习笔记--迭代器模式

1 using System; 2 3 namespace Iterator 4 { 5 /// <summary> 6 /// 作者:bzyzhang 7 /// 时间:2016/5/30 20:01:24 8 /// 博客地址:http://www.cnblogs.com/bzyzhang/ 9 /// Iterator说明:迭代器抽象类 10 /// </summary> 11 public abstract class Iterator 12 { 13 public abs

《Head first设计模式》学习笔记 – 迭代器模式

代器模式提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示. 爆炸性新闻:对象村餐厅和对象村煎饼屋合并了!真是个好消息!现在我们可以在同一个地方,享用煎饼屋美味的煎饼早餐,和好吃的餐厅午餐了.但是,好像有一点小麻烦:新的餐厅想用煎饼屋菜单当作早餐的菜单,使用餐厅的菜单当做午餐的菜单,大家都同意了这样实现菜单项.但是大家无法同意菜单的实现.煎饼屋使用ArrayList记录他的菜单项,而餐厅使用的是数组.他们两个都不愿意改变他们的实现,毕竟有太多代码依赖于它们了. 检查菜单项 让我

设计模式C++实现——迭代器模式

模式定义 迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示. 迭代器模式让我们能游走于聚合内的每一个元素,而又不暴露其内部的表示.把游走的任务放在迭代器上,而不是聚合上.这样简化了聚合的接口和实现,也让责任各得其所. 模式结构: Iterator:迭代器定义访问和遍历元素的接口 ConcreteIterator:具体迭代器实现迭代器接口:对该聚合遍历时跟踪当前位置 Aggregate:聚合定义创建相应的迭代器对象接口 ConcreteAggregate:具体聚合实现

设计模式学习之-状态模式

一.状态模式状态模式,当一个对象的内在状态发生改变时允许改变其行为行为,这个对象像是改变了其子类.状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况.把状态的判断逻辑转移到表示不同的状态的一系列类当中,可以把复杂的判断逻辑简化.当然,如果这个状态判断比较简单,那就没有必要用“状态模式”了.这段话有点难以理解,简而言之就是,在一类中根据当前状态去实例化下一状态子类.下面是状态模式结构图. State类,是一个抽象状态类,定义一个接口以封装与Context的特定状态相关的行为.

设计模式学习02—工厂模式

1.动机与定义 我们在程序中使用一个对象时,需要new一下,如果需要设置其他值就再初始化一下.比如我要使用一个按钮,手动new一个矩形按钮,然后初始化一些值,如显示文字,背景色等. // 矩形按钮 IButton btn = new RecButton(); // 初始化其他值 btn.setText("提交"); btn.setBackgroundColor("#00aaff"); // 其他初始化省略 // 圆形按钮 IButton btn2 = new Rou

设计模式学习之外观模式(Facade,结构型模式)(8)

1.什么是外观模式为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用 2.为什么要使用外观模式在软件开发系统中,客户程序经常会与复杂系统的内部子系统之间产生耦合,从而导致客户程序随着子系统的变化而变化,那么如何简化客户程序与子系统之间的交互接口?如何将复杂系统的内部子系统与客户程序之间的依赖解耦? 现在来考虑这样一个抵押系统,当有一个客户来时,有如下几件事情需要确认:到银行子系统查询他是否有足够多的存款,到信用子系统查询他是否有良好的信

设计模式入门之迭代器模式Iterator

迭代器模式定义:提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部实现 迭代器模式的结构和说明 Iterator::迭代器接口.定义访问和遍历元素的接口 ConcreteIterator:具体的迭代器实现对象.实现对聚合对象的遍历,并跟踪遍历时的当前位置 Aggregate:聚合对象.定义创建相应迭代器对象的接口 ConcreteAggregate:具体聚合对象.实现创建相应的迭代器对象 实例:一个公司,工资列表是用List实现的,后收购一家公司,工资列表是用Array实现