天天看點

結合項目執行個體 回顧傳統設計模式(九)疊代器模式

關于疊代器模式,我們所需要知道的第一件事情就是它依賴于一個名為疊代器的接口。一旦我們有了這個接口,就可以為各種那個對象集合實作疊代器:數組、清單、散清單。

項目執行個體我們就拿使用者角色子產品來舉例

背景

1.某使用者作為應用管理者擷取一組關于管理角色的arraylist權限組

2.該使用者作為應用開發者擷取一組關于開發角色的數組形式的權限組

...

 /// <summary>

    /// 疊代器接口

    /// </summary>

    public interface RoleIterator

    {

        //傳回一個布爾值,讓客戶知道是否還有更多的元素

        bool hasnext();

        //傳回下一個元素

        Object next();

    }

    /// <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;

    /// 管理者

    public class ManagerRole

        public RoleIterator createIterator()

            return new ManagerRoleIterator(items);

    /// 為開發者服務的疊代器

    public class DevelopRoleIterator : RoleIterator

        RoleItem[] items;

        public DevelopRoleIterator(RoleItem[] RoleItems)

            if (position >= items.Length || items[position] == null)

            RoleItem ri = items[position];

    /// 開發者

    public class DevelopRole

        static int MAX_ITEMS = 6;

        int numberofitems = 0;

            return new DevelopRoleIterator(items);

    /// 使用者

    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;

總結:疊代器模式提供一種方法順序通路一個聚合對象中的各個元素,而又不暴露其内部的表示。把通路的任務放在疊代器上,而不是聚合上。這樣簡化了聚合的接口和實作,也讓責任各得其所。

本文轉自 熬夜的蟲子  51CTO部落格,原文連結:http://blog.51cto.com/dubing/712416

繼續閱讀