設計模式之迭代器模式java實現代碼

來源:互聯網
上載者:User

迭代器模式:提供一個方法順序訪問一個彙總對象中的各個元素,而又不暴露其內部的表示。

迭代器模式提供了一種方法,可以順序訪問一個彙總對象中的元素,而又不用知道內部是如何標示的。另外,迭代器模式把在元素之間遊走的責任交給迭代器,而不是彙總對象,讓彙總更專註於資料集合。

案例實現情景:我和友人去超市分頭購物,在結帳時,我們遍曆一下我們的 “掃貨” 清單(遍曆列印購物清單),在實現上,Me使用ArrayList,友人使用Thing[]數組,給遍曆造成困擾。

案例代碼:

Thing.java

 

public class Thing {private String name;private long price;public Thing(String name,long price){this.name = name;this.price = price;}@Overridepublic String toString() {return "Thing [name=" + name + ", price=" + price + "]";}}

Me.java

 

 

import java.util.ArrayList;import java.util.Iterator;public class Me {private ArrayList<Thing> shopping = new ArrayList<Thing>();public Me(){shopping.add(new Thing("巧克力", 35));shopping.add(new Thing("涼茶", 4));shopping.add(new Thing("襪子", 9));shopping.add(new Thing("香蕉", 12));}public Iterator<Thing> createIterator(){return shopping.iterator();}}

Friends.java

 

 

import java.util.Iterator;public class Friends {private Thing[] shopping = new Thing[100];public Friends(){shopping[0] = new Thing("牛奶",15);shopping[1] = new Thing("蘋果",10);shopping[2] = new Thing("薯片",4);}public Iterator<Thing> createIterator(){return new ArrayIterator(shopping);}}

ArrayIterator.java

 

 

import java.util.Iterator;public class ArrayIterator implements Iterator<Thing>{private Thing[] thingArray;private int position = 0;public ArrayIterator(Thing[] array){thingArray = array;}@Overridepublic boolean hasNext() {while(position<thingArray.length && thingArray[position] != null){return true;}return false;}@Overridepublic Thing next() {return thingArray[position++];}@Overridepublic void remove() {//noting to do }}

Test.java

 

 

import java.security.AllPermission;import java.util.ArrayList;import java.util.Iterator;public class Test {public static void main(String args[]){ArrayList<Iterator<Thing>> allIterator = new ArrayList<Iterator<Thing>>();Me me = new Me();Friends friends = new Friends();Iterator<Thing> meIterator = me.createIterator();Iterator<Thing> friendsIterator = friends.createIterator();allIterator.add(meIterator);allIterator.add(friendsIterator);for(Iterator<Thing> iterator:allIterator){while(iterator.hasNext()){System.out.println(iterator.next());}System.out.println("---------------------");}}}

測試結果:

 

 

Thing [name=巧克力, price=35]Thing [name=涼茶, price=4]Thing [name=襪子, price=9]Thing [name=香蕉, price=12]---------------------Thing [name=牛奶, price=15]Thing [name=蘋果, price=10]Thing [name=薯片, price=4]---------------------

總結:

設計原則:

單一職責:一個類應該只有一個引起變化的職責。

當一個模組或一個類被設計成只支援一組相關的功能時,我們說它具有高內聚。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.