设计模式:迭代器模式(Iterator)
歡迎支持筆者新作:《深入理解Kafka:核心設計與實踐原理》和《RabbitMQ實戰指南》,同時歡迎關注筆者的微信公眾號:朱小廝的博客。
歡迎跳轉到本文的原文鏈接:https://honeypps.com/design_pattern/iterator/
提供一種方法順序訪問一個聚合對象中各個元素,而又不需暴露該對象的內部表示。又稱游標(Cursor)模式。
迭代器模式角色組成:
舉個簡單案例
1 Iterator
2 ConcreteIterator
public class ConcreteIterator implements Iterator {private List<Object> list = Collections.emptyList();private int current = 0;public ConcreteIterator(List<Object> list){this.list = list;}@Overridepublic Object next(){Object obj = null;if(this.hasNext()){obj = this.list.get(current++);}return obj;}@Overridepublic boolean hasNext(){if(current == list.size()){return false;}return true;} }3 Aggregate
public interface Aggregate {public void add(Object obj);public void remove(Object obj);public Iterator iterator(); }4 ConcreteAggregate
public class ConcreteAggregate implements Aggregate {private List<Object> list = new ArrayList<>();@Overridepublic void add(Object obj){list.add(obj);}@Overridepublic void remove(Object obj){list.remove(obj);}@Overridepublic Iterator iterator(){return new ConcreteIterator(list);} }5 測試代碼
Aggregate ag = new ConcreteAggregate();ag.add("zzh");ag.add("jj");ag.add("qq");Iterator it = ag.iterator();while(it.hasNext()){System.out.println(it.next());}輸出:
zzh jj qq優缺點
優點:
缺點:
適用場景
?迭代器模式是與集合共生共死的,一般來說,我們只要實現一個集合,就需要同時提供這個集合的迭代器,就像Java中的Collection,List,Set,Map等,這些集合都有自己的迭代器。假如我們要實現一個這樣的新的容器,當然也需要引入迭代器模式,給我們的容器實現一個迭代器。但是,由于容器與迭代器的關系太密切了,所以大多數語言在實現容器的時候都給提供了迭代器,并且這些語言提供的容器和迭代器在絕大多數情況下就可以滿足我們的需要,所以現在需要我們自己取實踐迭代器模式的場景還是比較少見的,我們只需要使用語言中已有的容器和迭代器就可以了。
參考資料
歡迎跳轉到本文的原文鏈接:https://honeypps.com/design_pattern/iterator/
歡迎支持筆者新作:《深入理解Kafka:核心設計與實踐原理》和《RabbitMQ實戰指南》,同時歡迎關注筆者的微信公眾號:朱小廝的博客。
總結
以上是生活随笔為你收集整理的设计模式:迭代器模式(Iterator)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 设计模式:命令模式(Command)
- 下一篇: 设计模式:中介者模式(Mediator)