传统设计模式(九)迭代器模式

关于迭代器模式,我们所需要知道的第一件事情就是它依赖于一个名为迭代器的接口。一旦我们有了这个接口,就可以为各种那个对象集合实现迭代器:数组、列表、散列表。

项目实例我们就拿用户角色模块来举例

背景

1.某用户作为应用管理员获取一组关于管理角色的arraylist权限组

2.该用户作为应用开发者获取一组关于开发角色的数组形式的权限组

...

/// <summary>
    /// 迭代器接口
    /// </summary>
    public interface RoleIterator
    {
        //返回一个布尔值,让客户知道是否还有更多的元素
        bool hasnext();
        //返回下一个元素
        Object next();
    }

    /// <summary>
    /// 为管理者服务的迭代器
    /// </summary>
    public class ManagerRoleIterator : RoleIterator
    {
        ArrayList items;
        int position = 0;
        public ManagerRoleIterator(ArrayList RoleItems)
        {
            this.items = RoleItems;
        }
        public bool hasnext()
        {
            if (position >= items.Count || items[position] == null)
            {
                return false;
            }
            return true;
        }
        public Object next()
        {
            Object ri = items[position];
            position++;
            return ri;
        }
    }

    /// <summary>
    /// 管理者
	///查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/project/
    /// </summary>
    public class ManagerRole
    {
        ArrayList items;
        public RoleIterator createIterator()
        {
            return new ManagerRoleIterator(items);
        }
    }

    /// <summary>
    /// 为开发者服务的迭代器
    /// </summary>
    public class DevelopRoleIterator : RoleIterator
    {
        RoleItem[] items;
        int position = 0;
        public DevelopRoleIterator(RoleItem[] RoleItems)
        {
            this.items = RoleItems;
        }
        public bool hasnext()
        {
            if (position >= items.Length || items[position] == null)
            {
                return false;
            }
            return true;
        }
        public Object next()
        {
            RoleItem ri = items[position];
            position++;
            return ri;
        }
    }

    /// <summary>
    /// 开发者
    /// </summary>
    public class DevelopRole
    {
        static int MAX_ITEMS = 6;
        int numberofitems = 0;
        RoleItem[] items;
        public RoleIterator createIterator()
        {
            return new DevelopRoleIterator(items);
        }
    }

    /// <summary>
    /// 用户
    /// </summary>
    public class UserRole
    {
        ManagerRole mrole;
        DevelopRole drole;
        public UserRole(ManagerRole mrole, DevelopRole drole)
        {
            this.mrole = mrole;
            this.drole = drole;
        }
        public List<Object> getRole()
        {
            List<Object> lo = new List<object>();
            RoleIterator mi = mrole.createIterator();
            RoleIterator di = drole.createIterator();
            lo.AddRange(getRole(mi));
            lo.AddRange(getRole(di));
            return lo;
        }
        public List<Object> getRole(RoleIterator ri)
        {
            List<Object> li = new List<object>();
            while (ri.hasnext())
            {
                RoleItem ritem = (RoleItem)ri.next();
                li.Add(ritem);
            }
            return li;

        }

    }

总结:迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。把访问的任务放在迭代器上,而不是聚合上。这样简化了聚合的接口和实现,也让责任各得其所。

Author:cnblogs 熬夜的虫子

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索迭代器
, 迭代器模式
, return
, 迭代
, position
, items
, public
, 迭代依赖集合link
, 迭代模式
数组迭代器
迭代器设计模式、迭代器模式、迭代器模式 java、c 迭代器模式、php迭代器模式,以便于您获取更多的相关知识。

时间: 2024-09-19 09:10:17

传统设计模式(九)迭代器模式的相关文章

PHP设计模式之迭代器模式

迭代器:迭代器设计模式可帮助构造特定对象, 那些对象能够提供单一标准接口循环或迭代任何类型的可计数数据. 处理需要遍历的可计数数据时, 最佳的解决办法是创建一个基于迭代器设计模式的对象. <?php    class CD {                public $band  = "";        public $title = "";        public $trackList = array();                publi

深入理解JavaScript系列(35):设计模式之迭代器模式详解

 这篇文章主要介绍了深入理解JavaScript系列(35):设计模式之迭代器模式详解,迭代器模式(Iterator):提供一种方法顺序一个聚合对象中各个元素,而又不暴露该对象内部表示,需要的朋友可以参考下     介绍 迭代器模式(Iterator):提供一种方法顺序一个聚合对象中各个元素,而又不暴露该对象内部表示. 迭代器的几个特点是: 1.访问一个聚合对象的内容而无需暴露它的内部表示. 2.为遍历不同的集合结构提供一个统一的接口,从而支持同样的算法在不同的集合结构上进行操作. 3.遍历的同

PHP设计模式之迭代器模式_php实例

在不需要了解内部实现的前提下,遍历一个聚合对象的内部元素而又不暴露该对象的内部表示,这就是PHP迭代器模式的定义. 适用场景: 访问一个聚合对象的内容而无需暴露它的内部表示 支持对聚合对象的多种遍历 为遍历不同的聚合结构提供一个统一的接口 迭代器模式实例: <?php class ConcreteIterator implements Iterator{ private $position = 0; private $arr; function __construct(array $arr){

iOS设计模式之迭代器模式

迭代器模式 基本理解 迭代器模式(Iterrator):提供一个方法顺序访问一个聚合对象中的各个元素,而又不暴露该元素的内部表示. 当你访问一个聚合对象,而且不管这些对象是什么都需要遍历的时候,你就应该考虑用迭代器模式. 你需要对聚集有多种方式遍历时,可以考虑用迭代器模式. 迭代器模式就是分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不暴露集合的内部结构,又可让外部代码透明地访问集合内部的数据. 迭代器定义了一个用于访问集合元素并记录当前元素的接口. 不同的迭代器可以执行不同

Java使用设计模式中迭代器模式构建项目的代码结构示例_java

迭代器(Iterator)模式,又叫做游标(Cursor)模式.GOF给出的定义为:提供一种方法访问一个容器(container)对象中各个元素,而又不需暴露该对象的内部细节.  迭代器模式由以下角色组成:迭代器角色(Iterator):迭代器角色负责定义访问和遍历元素的接口. 具体迭代器角色(Concrete Iterator):具体迭代器角色要实现迭代器接口,并要记录遍历中的当前位置. 容器角色(Container):容器角色负责提供创建具体迭代器角色的接口. 具体容器角色(Concrete

学习JavaScript设计模式之迭代器模式_javascript技巧

迭代器模式是指提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示. JavaScript中的Array.prototype.forEach 一.jQuery中的迭代器 $.each([1, 2, 3], function(i, n) { console.log("当前下标为:"+ i + " 当前元素为:"+ n ); }); 二.实现自己的迭代器 var each = function(ary, callback) { for(var i

Head First设计模式之迭代器模式

一.定义 提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示: 主要解决:不同的方式来遍历整个整合对象. 何时使用:遍历一个聚合对象. 如何解决:把在元素之间游走的责任交给迭代器,而不是聚合对象. 二.结构 组成: 抽象容器:一般是一个接口,提供一个iterator()方法,例如java中的Collection接口,List接口,Set接口等. 具体容器:就是抽象容器的具体实现类,比如List接口的有序列表实现ArrayList,List接口的链表实现LinkList,S

深入浅出Java设计模式之迭代器模式

一.引言 迭代这个名词对于熟悉Java的人来说绝对不陌生.我们常常使用JDK提供的迭代接口进行java collection的遍历: Iterator it = list.iterator(); while(it.hasNext()){ //using "it.next();"do some businesss logic } 而这就是关于迭代器模式应用很好的例子. 二.定义与结构 迭代器(Iterator)模式,又叫做游标(Cursor)模式.GOF给出的定义为:提供一种方法访问一个

PHP设计模式之迭代器模式的深入解析_php技巧

迭代器(Iterator)模式,它在一个很常见的过程上提供了一个抽象:位于对象图不明部分的一组对象(或标量)集合上的迭代.迭代有几种不同的具体执行方法:在数组属性,集合对象,数组,甚至一个查询结果集之上迭代. 在对象的世界里,迭代器模式要维持类似数组的功能,看作是一个非侵入性对象刻面(facet),Client类往往分离自真实对象实现,指iterator接口.只要有可能,我们可以给迭代器传送一个引用,代替将来可能发生变化的具体或抽象类.参与者:◆客户端(Client):引用迭代器模式的方法在一组