目錄
迭代器模式的定義
迭代器模式的實(shí)現(xiàn)
迭代器模式角色
迭代器模式類圖
迭代器模式代碼實(shí)現(xiàn)
迭代器模式的特點(diǎn)
優(yōu)點(diǎn)
缺點(diǎn)
使用場(chǎng)景
注意事項(xiàng)
迭代器模式的定義
????????迭代器模式(Iterator Pattern)屬于行為型模式,其提供一種方法順序訪問(wèn)一個(gè)聚合對(duì)象中的各種元素,而又不暴露該對(duì)象的內(nèi)部表示,即不需要知道集合對(duì)象的底層表示。編程環(huán)境中非常常用的設(shè)計(jì)模式。
迭代器模式的實(shí)現(xiàn)
迭代器模式角色
- 抽象迭代器角色(Iterator):定義遍歷元素所需要的方法,通常包含next()、hasNext()、remove()等。
- 具體迭代器角色(Concrete Iterator):實(shí)現(xiàn)迭代器接口中定義的方法,完成對(duì)聚合對(duì)象的遍歷,記錄遍歷的當(dāng)前位置。
- 容器角色(Aggregate):一般是接口,定義存儲(chǔ)、添加、刪除聚合元素以及創(chuàng)建迭代器對(duì)象的接口。
- 具體容器角色(ConcreteAggregate):抽象容器的具體實(shí)現(xiàn)類,實(shí)現(xiàn)抽象容器,創(chuàng)建出容器迭代器的對(duì)象。
迭代器模式類圖
迭代器模式代碼實(shí)現(xiàn)
抽象迭代器角色
package com.common.demo.pattern.iterator;
/**
* @author Evan Walker 昂焱數(shù)據(jù): https://www.ayshuju.com
* @version 1.0
* @desc 抽象迭代器角色 抽象迭代器
* @date 2023/08/03 22:38:43
*/
public interface Iterator {
//判斷是否還有下一個(gè)元素
boolean hasNext();
//獲取第一個(gè)元素
Object first();
//獲取下一個(gè)元素
Object next();
}
具體迭代器角色
package com.common.demo.pattern.iterator;
import java.util.List;
/**
* @author Evan Walker 昂焱數(shù)據(jù): https://www.ayshuju.com
* @version 1.0
* @desc 具體迭代器角色 對(duì)象迭代器
* @date 2023/08/03 22:39:30
*/
public class ObjectIterator implements Iterator{
private List<Object> list;
//記錄遍歷時(shí)的位置
private int position = 0;
public ObjectIterator(List<Object> list) {
this.list = list;
}
@Override
public boolean hasNext() {
return position<list.size();
}
@Override
public Object first() {
return list.get(0);
}
@Override
public Object next() {
return list.get(position++);
}
}
抽象容器角色
package com.common.demo.pattern.iterator;
/**
* @author Evan Walker 昂焱數(shù)據(jù): https://www.ayshuju.com
* @version 1.0
* @desc 抽象聚合/容器角色
* @date 2023/08/03 22:43:07
*/
public interface Aggregate {
//添加對(duì)象
void addObject(Object object);
//移除對(duì)象
void removeObject(Object object);
//獲取迭代器
Iterator getIterator();
}
具體容器角色
package com.common.demo.pattern.iterator;
import java.util.ArrayList;
import java.util.List;
/**
* @author Evan Walker 昂焱數(shù)據(jù): https://www.ayshuju.com
* @version 1.0
* @desc 具體聚合/容器角色 對(duì)象聚合
* @date 2023/08/03 22:43:31
*/
public class ObjectAggregate implements Aggregate{
private List<Object> list = new ArrayList<>();
@Override
public void addObject(Object object) {
list.add(object);
}
@Override
public void removeObject(Object object) {
list.remove(object);
}
@Override
public Iterator getIterator() {
return new ObjectIterator(list);
}
}
測(cè)試類
package com.common.demo.pattern.iterator;
/**
* @author Evan Walker 昂焱數(shù)據(jù): https://www.ayshuju.com
* @version 1.0
* @desc 測(cè)試類
* @date 2023/08/03 22:44:47
*/
public class Test {
public static void main(String[] args) {
//創(chuàng)建聚合對(duì)象
ObjectAggregate objectAggregate = new ObjectAggregate();
//在聚合對(duì)象中填充數(shù)據(jù)
objectAggregate.addObject("我是好人一號(hào)");
objectAggregate.addObject("我是好人二號(hào)");
objectAggregate.addObject("我是好人三號(hào)");
//獲取迭代器
Iterator iterator = objectAggregate.getIterator();
//通過(guò)迭代器迭代數(shù)據(jù)
while (iterator.hasNext()){
System.out.println(iterator.next());
}
}
}
測(cè)試截圖
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-628856.html
迭代器模式的特點(diǎn)
優(yōu)點(diǎn)
- 簡(jiǎn)化集合遍歷代碼:迭代器模式可以封裝集合對(duì)象的遍歷過(guò)程,使得客戶端代碼更簡(jiǎn)潔清晰,無(wú)需關(guān)心集合對(duì)象的內(nèi)部表示和遍歷方式。
- 支持多種遍歷方式:通過(guò)定義不同的迭代器類,可以實(shí)現(xiàn)對(duì)同一個(gè)聚合對(duì)象的不同遍歷方式,靈活地應(yīng)對(duì)不同的需求。
- 封裝聚合對(duì)象的內(nèi)部表示:迭代器將遍歷操作從聚合對(duì)象中抽離出來(lái),使得聚合對(duì)象可以更好地封裝自己的內(nèi)部數(shù)據(jù)結(jié)構(gòu)。
缺點(diǎn)
- 增加了系統(tǒng)復(fù)雜性:引入迭代器模式將會(huì)增加額外的類和接口,增加了系統(tǒng)的復(fù)雜性和理解難度。
- 需要額外的內(nèi)存開銷:每個(gè)迭代器對(duì)象都需要占用一定的內(nèi)存空間,當(dāng)?shù)鲾?shù)量較多時(shí),會(huì)增加系統(tǒng)的內(nèi)存開銷。
使用場(chǎng)景
- 需要遍歷聚合對(duì)象的情況:當(dāng)需要遍歷訪問(wèn)一個(gè)聚合對(duì)象的元素,并且對(duì)外部隱藏其內(nèi)部表示時(shí),可以考慮使用迭代器模式。
- 需要支持多種遍歷方式的情況:當(dāng)同一聚合對(duì)象需要支持多種不同的遍歷方式時(shí),可以使用迭代器模式來(lái)實(shí)現(xiàn)。
注意事項(xiàng)
- 迭代器模式一般包括迭代器接口和具體迭代器實(shí)現(xiàn)類,以及聚合對(duì)象和具體聚合對(duì)象類。在使用迭代器模式時(shí),需要注意它們之間的關(guān)系和協(xié)作。
- 聚合對(duì)象需要提供創(chuàng)建迭代器對(duì)象的接口,以便客戶端能夠獲取迭代器對(duì)象進(jìn)行遍歷操作。
- 注意迭代器對(duì)象的生命周期管理,特別是在多線程環(huán)境下,需要注意迭代器的線程安全性和一致性。
- 考慮迭代器模式的性能影響,尤其是對(duì)于大規(guī)模數(shù)據(jù)集合的遍歷操作,需要合理評(píng)估迭代器模式的適用性和性能開銷。
更多消息資訊,請(qǐng)?jiān)L問(wèn)昂焱數(shù)據(jù)(https://www.ayshuju.com)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-628856.html
到了這里,關(guān)于設(shè)計(jì)模式行為型——迭代器模式的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!