zoukankan      html  css  js  c++  java
  • 结合项目实例 回顾传统设计模式(九)迭代器模式

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

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

    背景

    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>
        
    /// 管理者
        
    /// </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;

            }

        }

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

    原创作品允许转载,转载时请务必以超链接形式标明文章原始出处以及作者信息。
    作者:熬夜的虫子
    点击查看:博文索引
  • 相关阅读:
    Java中的位运算符
    华为2019年NE40E-X8,承诺命令
    华为网络设备修改console密码
    MySQL5.7 多实例
    华为防火墙域间策略全开命令
    Linux基础命令---ntpstat显示时间服务器同步
    【转载】Java程序模拟公安局人员管理系统
    redis cluster集群动态伸缩--删除主从节点
    DBUtils的使用之查询的操作
    服务治理-Resilience4j(限流)
  • 原文地址:https://www.cnblogs.com/dubing/p/2200256.html
Copyright © 2011-2022 走看看