設計模式——行為型模式(二)

6.8 迭代器模式

6.8.1 概述

定義:提供一個對象來順序訪問聚合對象中的一系列數據,而不暴露聚合對象的內部表示。

6.8.2 結構

迭代器模式主要包含以下角色:

  • 抽象聚合(Aggregate)角色:定義存儲、添加、刪除聚合元素以及創建迭代器對象的接口。
  • 具體聚合(ConcreteAggregate)角色:實現抽象聚合類,返回一個具體迭代器的實例。
  • 抽象迭代器(Iterator)角色:定義訪問和遍歷聚合元素的接口,通常包含 hasNext()、next() 等方法。
  • 具體迭代器(Concretelterator)角色:實現抽象迭代器接口中所定義的方法,完成對聚合對象的遍歷,記錄遍歷的當前位置。

6.8.3 案例實現

【例】定義一個可以存儲學生對象的容器對象,將遍歷該容器的功能交由迭代器實現,涉及到的類如下:

代碼如下:

定義迭代器接口,聲明hasNext、next方法

class Student {private String name;private String number;public Student(String name, String number) {this.name = name;this.number = number;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getNumber() {return number;}public void setNumber(String number) {this.number = number;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", number='" + number + '\'' +'}';}
}
//抽象迭代器角色接口
interface StudentIterator {boolean hasNext();Student next();
}
//具體迭代器角色類
class StudentIteratorImpl implements StudentIterator {private List<Student> list;private int position = 0;public StudentIteratorImpl(List<Student> list) {this.list = list;}@Overridepublic boolean hasNext() {return position < list.size();}@Overridepublic Student next() {Student currentStudent = list.get(position);position++;return currentStudent;}
}
interface StudentAggregate {void addStudent(Student student);void removeStudent(Student student);StudentIterator getStudentIterator();
}
class StudentAggregateImpl implements StudentAggregate {private List<Student> list = new ArrayList<Student>();  // 學生列表@Overridepublic void addStudent(Student student) {this.list.add(student);}@Overridepublic void removeStudent(Student student) {this.list.remove(student);}@Overridepublic StudentIterator getStudentIterator() {return new StudentIteratorImpl(list);}
}
class Client{public static void main(String[] args) {//創建聚合對象StudentAggregateImpl studentAggregate = new StudentAggregateImpl();//添加元素studentAggregate.addStudent(new Student("張三","1001001"));studentAggregate.addStudent(new Student("李四","1001002"));studentAggregate.addStudent(new Student("王二","1001003"));studentAggregate.addStudent(new Student("麻子","1001004"));//遍歷聚合對象StudentIterator studentIterator = studentAggregate.getStudentIterator();while(studentIterator.hasNext()){Student student = studentIterator.next();System.out.println(student.toString());}}
}

Student{name='張三', number='1001001'}
Student{name='李四', numbe

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/165585.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/165585.shtml
英文地址,請注明出處:http://en.pswp.cn/news/165585.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C# Onnx PP-Vehicle 車輛分析(包含:車輛檢測,識別車型和車輛顏色)

目錄 效果 模型信息 mot_ppyoloe_s_36e_ppvehicle.onnx vehicle_attribute_model.onnx 項目 代碼 下載 其他 C# Onnx PP-Vehicle 車輛分析&#xff08;包含&#xff1a;車輛檢測&#xff0c;識別車型和車輛顏色&#xff09; 效果 模型信息 mot_ppyoloe_s_36e_ppvehi…

009 OpenCV 二值化 threshold

一、環境 本文使用環境為&#xff1a; Windows10Python 3.9.17opencv-python 4.8.0.74 二、二值化算法 2.1、概述 在機器視覺應用中&#xff0c;OpenCV的二值化函數threshold具有不可忽視的作用。主要的功能是將一幅灰度圖進行二值化處理&#xff0c;以此大幅降低圖像的數…

ASP.NET Core 啟用CORS

瀏覽器的安全阻止一個域的本地頁面請求另外不同域的本地頁面&#xff0c;這個限制叫同源策略&#xff0c;這個安全特性用來阻止惡意站點從別的網站讀取數據 例如假如我有一個頁面叫A.html https://foo.example/A.html 現在頁面A.html有一個ajax代碼嘗試讀取B.html的HTML的源…

【PyQt】(自定義類)陰影遮罩

寫了一個感覺有些用的小玩具。 用于給控件添加陰影遮罩(強調主控件的同時屏蔽其余控件的點擊) 自定義陰影遮罩Mask&#xff1a; from PyQt5.QtCore import QPoint,QRect,Qt,QPoint,QSize from PyQt5.QtWidgets import QWidget,QLabel,QPushButton,QVBoxLayout from PyQt5.QtGu…

leetcode:合并兩個有序鏈表

題目描述 題目鏈接&#xff1a;21. 合并兩個有序鏈表 - 力扣&#xff08;LeetCode&#xff09; 題目分析 這個算法思路很簡單&#xff1a;就是直接找小尾插 定義一個tail和head&#xff0c;對比兩個鏈表結點的val&#xff0c;小的尾插到tail->next&#xff0c;如果一個鏈表…

每日一題:LeetCode-589.N叉樹的前序遍歷序列構造二叉樹

每日一題系列&#xff08;day 01&#xff09; 前言&#xff1a; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f50e…

企業微信身份驗證

本篇主要是在上一篇獲取第三方憑證基礎上&#xff0c;用戶通過三方網站自定義授權登錄后獲取用戶信息&#xff0c;以實現用戶綁定登錄功能。 構造第三方應用授權鏈接 如果第三方應用需要在打開的網頁里面攜帶用戶的身份信息&#xff0c; 第一步需要構造如下的鏈接來獲取授權c…

馬養殖場建設VR模擬實訓教學平臺具有靈活性和復用性

為保障養殖場生物安全&#xff0c;避免疫病傳播&#xff0c;學生出入養殖場受時間和地域的限制&#xff0c; 生產實習多以參觀為主&#xff0c;通過畜牧企業技術人員的講解&#xff0c;學生被動了解生產過程。為了解決畜牧養殖實訓難的問題&#xff0c;借助VR技術開展畜牧養殖虛…

通過云服務器部署JavaWeb項目

文章目錄 搭建Java運行環境部署項目更改部分項目代碼打包項目把war包上傳到webapps目錄下驗證程序 搭建Java運行環境 搭建環境的部分比較復雜&#xff0c;為了讓大家的思路更加清晰特別總結為一篇博客點擊查看 部署項目 更改部分項目代碼 打包項目 把war包上傳到webapps目錄…

大洋鉆探系列之三IODP 342航次是干什么的?(下)

上文簡要地介紹IODP342航次的總體情況&#xff0c;本文以航次1個鉆孔&#xff08;U1403&#xff09;為例&#xff0c;更為詳細地系統展示大洋鉆探航次的工作和成果。 ?編輯? 站位疊加多波束影像的成果圖見下圖&#xff0c;從圖中的顏色效果可以看出&#xff0c;此多波束的成…

歸并排序算法

文章目錄 歸并排序一、歸并排序思路二、歸并排序算法模板三、題目代碼 歸并排序 一、歸并排序思路 二、歸并排序算法模板 void merge_sort(int q[], int l, int r) {if (l > r) return;int mid l r >> 1;//中間值merge_sort(q, l, mid);merge_sort(q, mid 1, r);…

大數據分析與應用實驗任務九

大數據分析與應用實驗任務九 實驗目的 進一步熟悉pyspark程序運行方式&#xff1b; 熟練掌握pysaprkRDD基本操作相關的方法、函數&#xff0c;解決基本問題。 實驗任務 進入pyspark實驗環境&#xff0c;打開命令行窗口&#xff0c;輸入pyspark&#xff0c;完成下列任務&am…

Redis入門教程

1. 什么是NoSql NoSQL一詞最早出現于1998年&#xff0c;是Carlo Strozzi開發的一個輕量、開源、不提供SQL功能的關系數據庫。2009年&#xff0c;Last.fm的Johan Oskarsson發起了一次關于分布式開源數據庫的討論&#xff0c;來自Rackspace的Eric Evans再次提出了NoSQL的概念&am…

onnx導出報錯 | IndexError: index_select(): Index is supposed to be a vector

解決方案&#xff1a; 在torch.onnx.export鐘添加do_constant_foldingFalse&#xff0c;如下 torch.onnx.export(model,(None, text),text_fp32_onnx_path,input_names[text],output_names[unnorm_text_features],export_paramsTrue,opset_version13,verboseTrue,do_constant_…

編程參考 - C++ Code Review: 一個計算器的項目

GitHub - jroelofs/calc: Toy Calculator Toy Calculator 1&#xff0c;拿到一個project&#xff0c;第一眼看&#xff0c;沒有配置文件&#xff0c;說明沒有引入持續集成系統&#xff0c;continuous integration system。 2&#xff0c;然后看cmake文件&#xff0c;使用的子…

使用Python的turtle模塊繪制鋼鐵俠圖案

1.1引言&#xff1a; 在Python中&#xff0c;turtle模塊是一個非常有趣且強大的工具&#xff0c;它允許我們以一個可視化和互動的方式學習編程。在本博客中&#xff0c;我們將使用turtle模塊來繪制鋼鐵俠的圖案。通過調用各種命令&#xff0c;我們可以引導turtle繪制出指定的圖…

第十四章 控制值的轉換 - 在DISPLAYLIST中投影值

文章目錄 第十四章 控制值的轉換 - 在DISPLAYLIST中投影值在DISPLAYLIST中投影值 第十四章 控制值的轉換 - 在DISPLAYLIST中投影值 在DISPLAYLIST中投影值 對于 %String 類型&#xff08;或任何子類&#xff09;的屬性&#xff0c;XML 投影可以使用 DISPLAYLIST 參數。 簡單…

CrystalDiskInfo/CrystalDiskMark/DiskGenius系統遷移

CrystalDiskInfo 主要用于看硬盤的各種信息&#xff0c;包括但不限于硬盤通電時間、通電次數、硬盤好壞狀態 CrystalDiskMark 主要用于測試硬盤的讀寫速度、連續讀寫速度 DiskGenius 主要用于通過U盤裝操作系統后進行&#xff0c;磁盤分區&#xff0c;更改磁盤名、隱藏部分…

【前端知識】Node——http模塊url模塊的常用操作

一、創建簡易Server const http require(http); const URL require(url);const HTTP_PORT 8088;const server http.createServer((req, res) > {// req&#xff1a;request請求對象&#xff0c;包含請求相關的信息&#xff1b;// res&#xff1a;response響應對象&…