有人用wordpress做企業(yè)seo做得比較好的公司
1.迭代器模式的定義
? ? ? ? 迭代器模式提供一種對容器對象中的各個元素進行訪問的方法,而不需要暴露該對象的內(nèi)部細節(jié);
? ? ? ? 在軟件系統(tǒng)中,容器對象有兩個職責:一是存儲數(shù)據(jù),二是遍歷數(shù)據(jù);從依賴性上看,前者是基本職責,而后者是可以變化的,又是可以分離的,因此可以將遍歷數(shù)據(jù)的行為從容器中抽取出來,封裝到迭代器對象中,由迭代器來提供遍歷數(shù)據(jù)的行為,這將簡化聚合對象的設計,更加符合單一職責原則;
? ? ? ? 對于迭代器模式,設計時很少用到,但編碼時經(jīng)常用到,目前大多數(shù)編程語言中,迭代器已經(jīng)成為一個基礎的類庫,直接能用來遍歷集合對象;
1.1 迭代器模式的優(yōu)缺點
優(yōu)點
- 迭代器模式支持以不同方式遍歷一個集合對象,在同一個集合對象上可以定義多種遍歷方式,在迭代器模式中只需要用一個不同的迭代器來替換原有的迭代器,即可改變遍歷算法,也可以自己定義迭代器的子類以支持新的遍歷方式;
- 迭代器簡化了集合類,原有的集合對象不需要再自行提供數(shù)據(jù)遍歷等方法;
- 由于引入了抽象層,增加新的集合類和迭代器類都很方便,無需修改原有代碼,滿足基于接口編程而非實現(xiàn)和開閉原則;
缺點
- 由于迭代器模式將存儲數(shù)據(jù)和遍歷數(shù)據(jù)的職責分離,增加了類的個數(shù),增加了系統(tǒng)的復雜性;
- 抽象迭代器的設計難度較大,需要充分考慮到系統(tǒng)將來的擴展;
1.2 迭代器模式的使用場景
- 減少程序中重復的遍歷代碼;
- 當需要為遍歷不同的集合結構提供一個統(tǒng)一的接口時或當訪問一個集合對象的內(nèi)容而無需暴露其內(nèi)部細節(jié)時;
2.迭代器模式的原理
- 抽象集合類(Aggregate):用于存儲和管理元素對象,定義存儲、添加、刪除集合的功能,并且聲明了一個 createIterator() 方法用于創(chuàng)建迭代器對象;
- 具體集合類(ConcreteAggregate):實現(xiàn)抽象集合類,返回一個具體迭代器的實例;
- 抽象迭代器類(Interator):定義訪問和遍歷集合元素的接口,通常包含 hasNext()、next() 等方法;
- 具體迭代器類(ConcreteIterator):實現(xiàn)抽象迭代器接口所定義的方法,完成對集合對象的遍歷,同時記錄遍歷的當前位置;
3.迭代器模式的實現(xiàn)
【代碼】
? ? ? ? 抽象迭代器
public interface IteratorIterator<E> {void reset(); //重置為第一個元素E next(); //獲取下一個元素E currentItem(); //檢索當前元素boolean hasNext(); //判斷是否還有下一個元素存在
}
? ? ? ? 抽象集合
public interface ListList<E> {//獲取迭代器對象的抽象方法(面向接口編程)IteratorIterator<E> Iterator();
}
????????具體迭代器
public class TopicIterator implements IteratorIterator<Topic> {//Topic數(shù)組private Topic[] topics;//記錄存儲位置private int position;public TopicIterator(Topic[] topics) {this.topics = topics;position = 0;}@Overridepublic void reset() {position = 0;}@Overridepublic Topic next() {return topics[position++];}@Overridepublic Topic currentItem() {return topics[position];}@Overridepublic boolean hasNext() {if(position >= topics.length){return false;}return true;}
}
? ? ? ? 抽象迭代器
public class TopicList implements ListList<Topic> {private Topic[] topics;public TopicList(Topic[] topics) {this.topics = topics;}@Overridepublic IteratorIterator<Topic> Iterator() {return new TopicIterator(topics);}
}
? ? ? ? 客戶端
public class Client {public static void main(String[] args) {Topic[] topics = new Topic[4];topics[0] = new Topic("topic1");topics[1] = new Topic("topic2");topics[2] = new Topic("topic3");topics[3] = new Topic("topic4");TopicList topicList = new TopicList(topics);IteratorIterator<Topic> iterator = topicList.Iterator();while(iterator.hasNext()){Topic t = iterator.next();System.out.println(t.getName());}}
}