日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

迭代器模式一訪問人員列表

 WindySky 2018-02-25

一模式定義

迭代器模式,提供了一種模式順序訪問一個(gè)集合對(duì)象中各個(gè)元素的功能,而又不暴露其內(nèi)部的表示。

 

二模式舉例

1模式分析

我們借用訪問人員列表這一案例來說明這一模式。

2迭代器模式靜態(tài)類圖



 

3代碼示例

3.1 人員信息接口——IPerson

Java代碼  收藏代碼
  1. package com.demo.person;  
  2.   
  3. /** 
  4.  * 人員信息 
  5.  *  
  6.  * @author 
  7.  *  
  8.  */  
  9. public interface IPerson  
  10. {  
  11.     /** 
  12.      * 獲得人員信息 
  13.      *  
  14.      * @return 
  15.      */  
  16.     public String getPersonInfo();  
  17.   
  18. }  

 

3.2 人員信息實(shí)現(xiàn)——Person

Java代碼  收藏代碼
  1. package com.demo.person;  
  2.   
  3. /** 
  4.  * 人員具體實(shí)現(xiàn)類 
  5.  *  
  6.  * @author 
  7.  *  
  8.  */  
  9. public class Person implements IPerson  
  10. {  
  11.     // 姓名  
  12.     private String name;  
  13.     // 年齡  
  14.     private int age;  
  15.     // 性別(1:男性 0:女性)  
  16.     private int sex;  
  17.   
  18.     /** 
  19.      * 構(gòu)造方法設(shè)置屬性內(nèi)容 
  20.      *  
  21.      * @param name 
  22.      * @param age 
  23.      * @param sex 
  24.      */  
  25.     public Person(String name, int age, int sex)  
  26.     {  
  27.         this.name = name;  
  28.         this.age = age;  
  29.         this.sex = sex;  
  30.     }  
  31.   
  32.     /** 
  33.      * 獲得人員信息 
  34.      *  
  35.      * @return 
  36.      */  
  37.     public String getPersonInfo()  
  38.     {  
  39.         return "姓名:" + this.name + " - 年齡:" + this.age + " - 性別:" + (this.sex == 1 ? "男" : (this.sex == 0 ? "女" : ""));  
  40.     }  
  41.   
  42. }  

 

3.3 人員集合接口——IPersonList

Java代碼  收藏代碼
  1. package com.demo.person;  
  2.   
  3. import com.demo.iterator.Iterator;  
  4.   
  5. /** 
  6.  * 人員接口 
  7.  *  
  8.  * @author 
  9.  *  
  10.  */  
  11. public interface IPersonList {  
  12.     /** 
  13.      * 獲得內(nèi)部存儲(chǔ)人員信息內(nèi)容 
  14.      *  
  15.      * @return 
  16.      */  
  17.   
  18.     public IPerson[] getPersonList();  
  19.   
  20.     /** 
  21.      * 迭代器 
  22.      *  
  23.      * @return 
  24.      */  
  25.     public Iterator iterator();  
  26. }  

 

3.4 人員集合實(shí)現(xiàn)——PersonList

Java代碼  收藏代碼
  1. package com.demo.person;  
  2.   
  3. import java.util.Random;  
  4.   
  5. import com.demo.iterator.ArrPersonIterator;  
  6. import com.demo.iterator.Iterator;  
  7.   
  8. /** 
  9.  * 人員列表信息 
  10.  *  
  11.  * @author 
  12.  *  
  13.  */  
  14. public class PersonList implements IPersonList {  
  15.     // 存儲(chǔ)用戶信息列表  
  16.     private final IPerson[] list = new IPerson[10];  
  17.   
  18.     // 構(gòu)造方法初始化人員信息  
  19.     public PersonList() {  
  20.         Random random = new Random();  
  21.         // 創(chuàng)建人員信息  
  22.         for (int i = 0; i < 10; i++) {  
  23.             IPerson person = new Person("人員" + i, random.nextInt(30), random  
  24.                     .nextInt(2));  
  25.             list[i] = person;  
  26.             // this.list.add(person);  
  27.         }  
  28.     }  
  29.   
  30.     /** 
  31.      * 獲得內(nèi)部存儲(chǔ)人員信息內(nèi)容 
  32.      *  
  33.      * @return 
  34.      */  
  35.   
  36.     public IPerson[] getPersonList() {  
  37.         return list;  
  38.     }  
  39.   
  40.     /** 
  41.      * 迭代器 
  42.      *  
  43.      * @return 
  44.      */  
  45.     public Iterator iterator() {  
  46.         return new ArrPersonIterator(this.list);  
  47.     }  
  48. }  

 

3.5 迭代器接口——Iterator

Java代碼  收藏代碼
  1. package com.demo.iterator;  
  2.   
  3. /** 
  4.  * 迭代器接口 
  5.  *  
  6.  * @author 
  7.  *  
  8.  */  
  9. public interface Iterator {  
  10.   
  11.     // 判斷是否含有下一個(gè)屆節(jié)點(diǎn)  
  12.     public boolean hasNext();  
  13.   
  14.     // 獲得下一個(gè)節(jié)點(diǎn)對(duì)象  
  15.     public Object next();  
  16.   
  17.     // 刪除對(duì)象  
  18.     public Object remove();  
  19. }  

 

3.6 迭代器實(shí)現(xiàn)——ArrPersonIterator

Java代碼  收藏代碼
  1. package com.demo.iterator;  
  2.   
  3. import com.demo.person.IPerson;  
  4.   
  5. /** 
  6.  * 數(shù)組迭代器實(shí)現(xiàn) 
  7.  *  
  8.  * @author 
  9.  *  
  10.  */  
  11. public class ArrPersonIterator implements Iterator {  
  12.     // 私有屬性存儲(chǔ)人員列表對(duì)象信息  
  13.     private final IPerson[] personList;  
  14.     // 存儲(chǔ)位置信息 初始值為-1  
  15.     private int index = -1;  
  16.   
  17.     /** 
  18.      * 構(gòu)造方法將人員列表對(duì)象傳入 
  19.      *  
  20.      * @param personList 
  21.      */  
  22.     public ArrPersonIterator(IPerson[] personList) {  
  23.         this.personList = personList;  
  24.     }  
  25.   
  26.     // 判斷是否含有下一個(gè)節(jié)點(diǎn)  
  27.     public boolean hasNext() {  
  28.         return (this.personList == null ? false  
  29.                 : (index < this.personList.length - 1));  
  30.     }  
  31.   
  32.     // 獲得下一個(gè)節(jié)點(diǎn)對(duì)象  
  33.     public Object next() {  
  34.         if (this.personList != null && (index < this.personList.length - 1)) {  
  35.             // 獲得人員列表對(duì)象中的人員信息  
  36.             return this.personList[++index];  
  37.         }  
  38.         return null;  
  39.     }  
  40.   
  41.     // 刪除對(duì)象  
  42.     public Object remove() {  
  43.         if (this.personList != null) {  
  44.             IPerson person = this.personList[index];  
  45.             this.personList[index] = null;  
  46.             return person;  
  47.         }  
  48.   
  49.         return null;  
  50.     }  
  51.   
  52. }  

 

3.7 讓迭代器遍歷集合對(duì)象——Client

Java代碼  收藏代碼
  1. package com.demo;  
  2.   
  3. import com.demo.iterator.Iterator;  
  4. import com.demo.person.IPerson;  
  5. import com.demo.person.IPersonList;  
  6. import com.demo.person.PersonList;  
  7.   
  8. public class Client {  
  9.   
  10.     /** 
  11.      * @param args 
  12.      */  
  13.     public static void main(String[] args) {  
  14.         // 創(chuàng)建人員列表對(duì)象  
  15.         IPersonList personList = new PersonList();  
  16.         System.out.println("----使用迭代器輸出人員信息 start......");  
  17.         // 生成迭代器  
  18.         Iterator iterator = personList.iterator();  
  19.         // 循環(huán)迭代器 遍歷每一個(gè)元素輸出人員信息  
  20.         while (iterator.hasNext()) {  
  21.             // 獲得人員對(duì)象實(shí)例  
  22.             IPerson person = (IPerson) iterator.next();  
  23.             if (person != null) {  
  24.                 // 輸出人員信息  
  25.                 System.out.println(person.getPersonInfo());  
  26.             }  
  27.         }  
  28.         System.out.println("----使用迭代器輸出人員信息   end......");  
  29.   
  30.     }  
  31. }  

 

4運(yùn)行結(jié)果

----使用迭代器輸出人員信息 start......

姓名:人員0 - 年齡:28 - 性別:女

姓名:人員1 - 年齡:25 - 性別:女

姓名:人員2 - 年齡:23 - 性別:女

姓名:人員3 - 年齡:18 - 性別:女

姓名:人員4 - 年齡:27 - 性別:女

姓名:人員5 - 年齡:28 - 性別:男

姓名:人員6 - 年齡:25 - 性別:女

姓名:人員7 - 年齡:23 - 性別:女

姓名:人員8 - 年齡:16 - 性別:男

姓名:人員9 - 年齡:12 - 性別:女

----使用迭代器輸出人員信息   end......

 

三該模式設(shè)計(jì)原則

1"開一閉"原則

2單一職責(zé)原則

 

四使用場(chǎng)合

1訪問一個(gè)集合對(duì)象的內(nèi)容,而無須暴露它的內(nèi)部表示。

2支持對(duì)集合對(duì)象的多種遍歷方式。

3為遍歷不同的集合對(duì)象結(jié)構(gòu)提供一個(gè)統(tǒng)一的接口。

 

五迭代器模式靜態(tài)類圖



 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多