16、設計模式之迭代器模式

迭代器模式

迭代器模式(Iterator Pattern)是 Java 和 .Net 編程環境中非常常用的設計模式。這種模式用于順序訪問集合對象的元素,不需要知道集合對象的底層表示。

迭代器模式屬于行為型模式。

介紹

意圖: 提供一種方法順序訪問一個聚合對象中各個元素, 而又無須暴露該對象的內部表示。

主要解決: 不同的方式來遍歷整個整合對象。

何時使用: 遍歷一個聚合對象。

如何解決: 把在元素之間游走的責任交給迭代器,而不是聚合對象。

關鍵代碼: 定義接口:hasNext, next。

** 應用實例:** JDK中Collectoin的 iterator。

優點:

  1. 它支持以不同的方式遍歷一個聚合對象。
  2. 迭代器簡化了聚合類。
  3. 在同一個聚合上可以有多個遍歷。
  4. 在迭代器模式中,增加新的聚合類和迭代器類都很方便,無須修改原有代碼。

缺點:
由于迭代器模式將存儲數據和遍歷數據的職責分離,增加新的聚合類需要對應增加新的迭代器類,類的個數成對增加,這在一定程度上增加了系統的復雜性。

使用場景:

  1. 訪問一個聚合對象的內容而無須暴露它的內部表示。
  2. 需要為聚合對象提供多種遍歷方式。
  3. 為遍歷不同的聚合結構提供一個統一的接口。

注意事項:
迭代器模式就是分離了集合對象的遍歷行為,抽象出一個迭代器類來負責,這樣既可以做到不暴露集合的內部結構,又可讓外部代碼透明地訪問集合內部的數據。

代碼實現

迭代器接口

public interface MyIterator<E> {boolean hasNext();E next();
}

迭代器生成接口

public interface IteratorBuilder<E> {MyIterator<E> iterator();}

動漫類

public class Animation implements IteratorBuilder<String>{private final String[] videos;private int position;public Animation(int maxSize){videos = new String[maxSize];}public String get(int index){return videos[index];}public void add(String video){videos[position++] = video;}public void addAll(String[] videoArr){for (String s : videoArr) {add(s);}}public MyIterator<String> iterator(){return new AnimationIterator();}private class AnimationIterator implements MyIterator<String> {private int index;public AnimationIterator(){this.index = 0;}public boolean hasNext(){return index < videos.length;}public String next(){return videos[index++];}}
}

客戶端

public class Client {public static void main(String[] args) {String[] videos = {"斗羅大陸", "練氣十萬年", "斗破蒼穹", "仙逆", "火影"};Animation animation = new Animation(videos.length);animation.addAll(videos);MyIterator<String> iterator = animation.iterator();while (iterator.hasNext()) {System.out.println(iterator.next());}}
}

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

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

相關文章

rtemis 包:多種機器學習算法集成!兼顧數據處理與可視化美圖

rtemis 是一個集機器學習與可視化于一體的 R 包&#xff0c;用于各種高級機器學習研究和應用。整體而言&#xff0c;該軟件有三個目標&#xff1a; 「應用數據科學」&#xff1a;使高級數據分析高效且易于使用 「機器學習研究」&#xff1a;提供一個平臺以開發和測試新穎的機器…

Linux 查詢開機時間

在Linux系統中&#xff0c;有幾種方法可以查詢系統的開機時間。 博主博客 https://blog.uso6.comhttps://blog.csdn.net/dxk539687357 方法一&#xff1a;使用 uptime 命令 uptime 命令顯示系統的運行時間以及其他信息。 [nukixuso6 ~]# uptime輸出示例&#xff1a; 15:29:…

【MySQL精通之路】查詢優化器的使用(8)-優化器提示

博主PS&#xff1a;優化器提示的作用就是你可以提示優化器使用什么優化策略。當然優化器只是被提示了&#xff0c;而不是必須按你的提示做出操作&#xff0c;它可以執行或者拒絕你的提示。所以它叫優化器提示&#xff0c;而不是優化器配置。 控制優化器策略的一種方法是設置優化…

谷歌B端獨立站建站推廣,外貿建站訓練營,傻瓜式教學

做外貿方法重要&#xff0c;工具更重要&#xff0c;而這些背后的規則和套路&#xff0c;身邊的人往往不會告訴你&#xff0c;成功的人更不會教給你。本套課程主要內容包括&#xff1a;一套體系化的獨立站建站方法&#xff0c;學會“高效學習”避免無效努力&#xff0c;擁有獨立…

不閉合三維TSP:蛇優化算法SO求解不閉合三維TSP(起點固定,終點不定,可以更改數據集),MATLAB代碼

旅行商從城市1出發&#xff0c;終點城市由算法求解而定 部分代碼 close all clear clc global data load(data.txt)%導入TSP數據集 Dimsize(data,1)-1;%維度 lb-100;%下界 ub100;%上界 fobjFun;%計算總距離 SearchAgents_no100; % 種群大小&#xff08;可以修改&#xff09; …

k8s node NotReady后會發生什么?

K8s 是一種強大的容器編排和管理平臺&#xff0c;能夠高效地調度、管理和監控容器化應用程序&#xff1b;其本身使用聲明式語義管理著集群內所有資源模型、應用程序、存儲、網絡等多種資源&#xff0c;Node 本身又屬于 K8s 計算資源&#xff0c;上面承載運行著各種類型的應用程…

新零售數據中臺:構建零售業高效率、智能化的數據處理平臺_光點科技

隨著互聯網技術的快速發展和移動支付、大數據等技術的廣泛應用&#xff0c;零售行業已經逐漸從傳統零售向新零售模式轉變。在這個變革的時代背景下&#xff0c;新零售數據中臺應運而生&#xff0c;它作為零售行業數據資源的整合與智能分析的核心載體&#xff0c;成為推動零售行…

Batchnorm的主要作用

Batchnorm的主要作用 加速訓練&#xff1a;BatchNorm能夠使神經網絡訓練得更快更穩定。它通過調整每層網絡輸入的數據分布&#xff0c;使得網絡的訓練過程更高效。 穩定性&#xff1a;BatchNorm減少了不同批次數據之間的差異&#xff0c;使得模型訓練更加穩定&#xff0c;不容…

10最佳iPhone數據恢復軟件評論

您還在尋找最好的iPhone數據恢復軟件嗎&#xff1f; 似乎我們在iPhone上放置了越來越多與日常生活和工作有關的重要事情。照片可以保持珍貴的時刻&#xff0c;聯系人可以保持聯系&#xff0c;錄音&#xff0c;備忘錄和日歷可以作為提醒&#xff0c;視頻和歌曲可以娛樂&#xf…

Ethernet匯總

架構 Ethernet 匯總 Ethernet系統框架 stamac Ethernet DTS配置 Ethernet 模塊&通信 Uboot實現 uboot Ethernet初始化 uboot Ethernet 數據收發流程【1】

xml篇---提取VOC格式的坐標,并按照cameraID進行排序(二)

xml篇—提取VOC格式的坐標&#xff0c;并按照cameraID進行排序&#xff08;二&#xff09; import os import xml.etree.ElementTree as ETdef parse_xml(xml_file):tree ET.parse(xml_file)root tree.getroot()objects {}for obj in root.findall(object):name obj.find(…

升級openssl與python問題

1、下載與安裝 wget --no-check-certificate https://www.openssl.org/source/openssl-1.1.1t.tar.gz tar -zxvf openssl-1.1.1t.tar.gz cd openssl-1.1.1t/ ./config --prefix/usr/local/ssl make sudo make install 2、完成后添加軟鏈接 mv /usr/bin/openssl /usr/bin/oldope…

Flutter 中的 ExpandIcon 小部件:全面指南

Flutter 中的 ExpandIcon 小部件&#xff1a;全面指南 Flutter 提供了一系列的動畫圖標&#xff0c;ExpandIcon 就是其中之一&#xff0c;它用于表示一個可以展開或收起的內容區域。這個小部件通常用于實現折疊列表、手風琴菜單或其他類似的UI元素。本文將為您提供一個全面的指…

頭歌05-排列樹實驗-批處理作業調度

""" 題目&#xff1a;給定n個作業的集合{J1,J2,…,Jn}。每個作業必須先由機器1處理&#xff0c;然后由機器2處理。所有任務必須先由機器1處理完成后&#xff0c;才能由機器2處理&#xff0c;并且在機器2的處理順序必須與機器1的處理順序一致&#xff0c;處理順序…

【DevOps】深入淺出:Jenkins 性能監控全解析

目錄 一、監控指標&#xff1a;把握系統健康狀況 1、資源利用率&#xff1a; 2、 任務執行效率&#xff1a; 3、系統穩定性&#xff1a; 二、監控工具&#xff1a;選擇合適的利器 1、Jenkins 內置監控 1.1、Jenkins Performance Plugin&#xff1a;系統性能指標的直觀展…

Android Webview加載pdf文件無法縮放問題

WebView設置開啟頁面縮放&#xff1a; settings webView.getSettings(); settings.setSupportZoom(true); settings.setJavaScriptEnabled(true); settings.setUseWideViewPort(true); settings.setLoadWithOverviewMode(true); settings.setBuiltInZoomControls(true); sett…

CDN管理平臺安裝說明

CDN管理平臺安裝說明 系統需求 操作系統&#xff1a;Linux CPU不少于1核心 可用內存不少于1G 可用硬盤空間不小于10G 對于每日千萬訪問以上的CDN系統推薦配置如下&#xff1a; CPU不少于8核心 可用內存不少于8G 可用硬盤空間不小于200G 準備工作 在安裝GoEdge之前&#xff0…

kubernetes(k8s) v1.30.1 創建本地鏡像倉庫 使用本地docker鏡像倉庫部署服務 Discuz X3.5 容器搭建論壇

1 master11創建本地鏡像倉庫 [rootmaster11 ~]# docker run -d -p 5000:5000 --restartalways --name registry registry:2 Unable to find image registry:2 locally 2: Pulling from library/registry 79e9f2f55bf5: Pull complete 0d96da54f60b: Pull complete 5b27040df…

Python 機器學習 基礎 之 數據表示與特征工程 【分類變量】的簡單說明

Python 機器學習 基礎 之 數據表示與特征工程 【分類變量】的簡單說明 目錄 Python 機器學習 基礎 之 數據表示與特征工程 【分類變量】的簡單說明 一、簡單介紹 二、數據表示與特征工程 數據表示 特征工程 三、分類變量 1、One-Hot編碼&#xff08;虛擬變量&#xff09…

漫談企業信息化安全-綜述

一、前言 一直以來想寫一些文章&#xff0c;談一談企業信息化過程中的安全問題及對策。 隨著信息技術的不斷發展和普及&#xff0c;特別是今年來移動辦公、云服務等等新的工作模式和新的信息技術的應用&#xff0c;企業信息化已經成為提升競爭力、促進創新和發展的重要途徑。…