目錄
- 第一章 迭代器模式介紹
- 第二章 迭代器模式實作
- 2.1、抽象迭代器
- 2.2、具體迭代器
- 2.3、抽象聚合類
- 2.4、具體聚合類
- 2.5、最終測驗類
- 第三章 迭代器模式應用
專案地址:https://gitee.com/caochenlei/design-pattern
第一章 迭代器模式介紹
迭代器模式的介紹:
在現實生活以及程式設計中,經常要訪問一個聚合物件中的各個元素,如“資料結構”中的鏈表遍歷,通常的做法是將鏈表的創建和遍歷都放在同一個類中,但這種方式不利于程式的擴展,如果要更換遍歷方法就必須修改程式源代碼,這違背了“開閉原則”,
迭代器模式(Iterator Pattern)是 Java 和 .Net 編程環境中非常常用的設計模式,這種模式用于順序訪問集合物件的元素,不需要知道集合物件的底層表示,迭代器模式屬于行為型模式,
迭代器模式的優點:
- 訪問一個聚合物件的內容而無須暴露它的內部表示,
- 遍歷任務交由迭代器完成,這簡化了聚合類,
- 它支持以不同方式遍歷一個聚合,甚至可以自定義迭代器的子類以支持新的遍歷,
- 增加新的聚合類和迭代器類都很方便,無須修改原有代碼,
- 封裝性良好,為遍歷不同的聚合結構提供一個統一的介面,
迭代器模式的缺點:
- 增加了類的個數,這在一定程度上增加了系統的復雜性,
迭代器模式的場景:
- 當需要為聚合物件提供多種遍歷方式時,
- 當需要為遍歷不同的聚合結構提供一個統一的介面時,
- 當訪問一個聚合物件的內容而無須暴露其內部細節的表示時,
迭代器模式的角色:
- 抽象聚合(Aggregate)角色:定義存盤、添加、洗掉聚合物件以及創建迭代器物件的介面,
- 具體聚合(Concrete Aggregate)角色:實作抽象聚合類,回傳一個具體迭代器的實體,
- 抽象迭代器(Iterator)角色:定義訪問和遍歷聚合元素的介面,通常包含 hasNext()、first()、next() 等方法,
- 具體迭代器(Concrete lterator)角色:實作抽象迭代器介面中所定義的方法,完成對聚合物件的遍歷,記錄遍歷的當前位置,

第二章 迭代器模式實作
2.1、抽象迭代器
Iterator
public interface Iterator {
Object first();
Object next();
boolean hasNext();
}
2.2、具體迭代器
ConcreteIterator
public class ConcreteIterator implements Iterator {
private List<Object> list;
private int index = -1;
public ConcreteIterator(List<Object> list) {
this.list = list;
}
@Override
public boolean hasNext() {
if (index < list.size() - 1) {
return true;
} else {
return false;
}
}
@Override
public Object first() {
index = 0;
Object obj = list.get(index);
return obj;
}
@Override
public Object next() {
Object obj = null;
if (this.hasNext()) {
obj = list.get(++index);
}
return obj;
}
}
2.3、抽象聚合類
Aggregate
public interface Aggregate {
void add(Object obj);
void remove(Object obj);
Iterator getIterator();
}
2.4、具體聚合類
ConcreteAggregate
public class ConcreteAggregate implements Aggregate {
private List<Object> list = new ArrayList<>();
public void add(Object obj) {
list.add(obj);
}
public void remove(Object obj) {
list.remove(obj);
}
public Iterator getIterator() {
return new ConcreteIterator(list);
}
}
2.5、最終測驗類
Client
public class Client {
public static void main(String[] args) {
Aggregate ag = new ConcreteAggregate();
ag.add("張三");
ag.add("李四");
ag.add("王五");
Iterator it = ag.getIterator();
while (it.hasNext()) {
Object object = it.next();
System.out.println(object.toString());
}
}
}
張三
李四
王五
第三章 迭代器模式應用
JDK 的 ArrayList 集合中就使用了迭代器模式,
public class ArrayListTest {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("張三");
list.add("李四");
list.add("王五");
Iterator<String> it = list.iterator();
while (it.hasNext()) {
Object object = it.next();
System.out.println(object);
}
}
}
張三
李四
王五
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/275137.html
標籤:java
下一篇:Java中的變數和基本資料型別
