什麼是匿名內部類,如何使用匿名內部類
阿新 • • 發佈:2020-11-12
定義:提供了一個物件來順序訪問聚合物件中的一系列資料,而不暴露聚合物件內部表露
優點:
1,訪問一個聚合物件的內容而無需暴露它的內部表示
2,遍歷任務交由迭代器完成,這簡化了聚合類
3,它支援以不同方式遍歷一個聚合,甚至可以自定義迭代器的子類以支援新的遍歷
4,增加新的聚合類和迭代器類都很方便,無需修改原有程式碼
5,封裝性良好,為遍歷不同的聚合結構提供一個統一的介面
缺點:
增加類的個數,這在一定程度上增加了系統的複雜性
模式結構
1,抽象聚合:儲存,新增,刪除聚合物件以及建立迭代器物件的介面
2,實現抽象聚合類,返回一個具體迭代器的例項
3,抽象迭代器:定義訪問和遍歷聚合元素的介面,通常包含hasNext(),first(),next()等方法
4,具體迭代器:實現抽象迭代器介面中所定義的方法,完成對聚合物件的遍歷,記錄遍歷的當前位置
應用場景:
1,當需要為聚合物件提供多種遍歷方式時
2,當需要為遍歷不同的聚合結構提供一個統一介面時
3,當訪問一個聚合物件的內容而無需暴露其內部細節的表示時
結構圖如下
程式碼:
package iterator; import java.util.*; public class IteratorPattern { public static void main(String[] args) { Aggregate ag=new ConcreteAggregate(); ag.add("中山大學"); ag.add("華南理工"); ag.add("韶關學院"); System.out.print("聚合的內容有:"); Iterator it=ag.getIterator(); while(it.hasNext()) { Object ob=it.next(); System.out.print(ob.toString()+"\t"); } Object ob=it.first(); System.out.println("\nFirst:"+ob.toString()); } } //抽象聚合 interface Aggregate { public void add(Object obj); public void remove(Object obj); public Iterator getIterator(); } //具體聚合 class ConcreteAggregate implements Aggregate { private List<Object> list=new ArrayList<Object>(); public void add(Object obj) { list.add(obj); } public void remove(Object obj) { list.remove(obj); } public Iterator getIterator() { return(new ConcreteIterator(list)); } } //抽象迭代器 interface Iterator { Object first(); Object next(); boolean hasNext(); } //具體迭代器 class ConcreteIterator implements Iterator { private List<Object> list=null; private int index=-1; public ConcreteIterator(List<Object> list) { this.list=list; } public boolean hasNext() { if(index<list.size()-1) { return true; } else { return false; } } public Object first() { index=0; Object obj=list.get(index);; return obj; } public Object next() { Object obj=null; if(this.hasNext()) { obj=list.get(++index); } return obj; } }