迭代器模式(Iterator Pattern)
一、定義
提供一種方法順序訪問一個聚合物件中各個元素,而又不需要暴露該物件的內部表示,
二、優缺點
優點: 1、它支持以不同的方式遍歷一個聚合物件, 2、迭代器簡化了聚合類, 3、在同一個聚合上可以有多個遍歷, 4、在迭代器模式中,增加新的聚合類和迭代器類都很方便,無須修改原有代碼,
缺點: 1、由于迭代器模式將存盤資料和遍歷資料的職責分離,增加新的聚合類需要對應增加新的迭代器類,類的個數成對增加,這在一定程度上增加了系統的復雜性,
三、具體實作
3.1 原型圖
- Iterator(迭代器):迭代器定義訪問和遍歷元素的介面,
- ConcreteIterator(具體迭代器):具體迭代器實作迭代器介面,對該聚合遍歷時跟蹤當前位置,
- Aggregate(聚合):聚合定義創建相應迭代器物件的介面,
- ConcreteAggregate(具體聚合):具體聚合實作創建相應迭代器的介面,該操作回傳ConcreteIterator的一個適當的實體,
3.2 實作
1、創建介面:
/**
* @author zhongtao
* @date 2023/6/17 18:48
*/
public interface Iterator {
public boolean hasNext();
public Object next();
}
/**
* @author zhongtao
* @date 2023/6/17 18:48
*/
public interface Container {
public Iterator getIterator();
}
2、創建實作了 Container 介面的物體類,該類有實作了 Iterator 介面的內部類 NameIterator,
/**
* @author zhongtao
* @date 2023/6/17 18:48
*/
public class NameRepository implements Container {
public String[] names = {"1" , "1" ,"1" , "1"};
@Override
public Iterator getIterator() {
return new NameIterator();
}
private class NameIterator implements Iterator {
int index;
@Override
public boolean hasNext() {
if(index < names.length){
return true;
}
return false;
}
@Override
public Object next() {
if(this.hasNext()){
return names[index++];
}
return null;
}
}
}
3、使用 NameRepository 來獲取迭代器,并列印名字,
/**
* @author zhongtao
* @date 2023/6/17 18:49
*/
public class IteratorPatternDemo {
public static void main(String[] args) {
NameRepository namesRepository = new NameRepository();
for (Iterator iter = namesRepository.getIterator(); iter.hasNext(); ) {
String name = (String) iter.next();
System.out.println("Name : " + name);
}
}
}
4、執行程式,輸出結果:
Name : 1
Name : 2
Name : 3
Name : 4
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/555479.html
標籤:設計模式
上一篇:8路TTL串口轉以太網串口服務器芯片EBT3002功能
下一篇:返回列表
