行為模式---迭代器模式

概念

迭代器模式是設計模式的行為模式,它的主要設計思想是提供一個可以操作聚合對象(容器或者復雜數據類型)表示(迭代器類)。通過迭代器類去訪問操作聚合對象可以隱藏內部表示,也可以使客戶端可以統一處理不同類型的家具和對象。

適應場景

1、當內部集合的數據結構很復雜并且不希望外部調用知道數據結構的數據組成的時候可以使用迭代器模式。

2、當程序中有很多的重復遍歷代碼的時候,可以使用迭代器模式減傷代碼量,保證程序的易讀性。

3、當代碼能夠用遍歷不同的甚至是無法預知的數據結構時,可以使用迭代器模式。

實現方式

1、使用迭代器模式,我們需要創建兩個類,一個是迭代器接口類,一個是容器類。

2、聲明迭代器接口的時候,需要注意該接口必須提供至少一個方法來獲取集合中的下個元素。也可以實現其他的接口(例如:添加數據接口、獲取最后一個、獲取第一個和元素數目等。)。

3、聲明聚合對象接口的時候,需要實現一個接口用于創建對應的迭代器的方法,其返回值必須是對應的迭代器對象。如果有需求使用其他的迭代器,可以多添加幾個創建迭代器的方法。

4、創建具體的迭代器類,在創建迭代器類的時候除了實現迭代器接口中的方法之外,還需要在構造函數進行迭代器和容器的關聯。

5、創建具體的容器類,除了需要實現容器類的接口之外,還需要實現容器中的具體存儲方式,例如是通過數據還是鏈表進行數據存儲。具體的集合對象在創建迭代器時候必須將自己傳遞給迭代器來創建迭代器和容器之間的連接。

6、到處迭代器模式基本完成,在客戶端使用的時候需要先創建容器,向容器中寫入數據,之后在創建迭代器,創建迭代器之后就可以通過迭代器操作容器了。

類關系圖

在這里插入圖片描述

示例代碼

#include "MingLingMoShi.h"int main()
{std::cout << "歡迎東哥來到設計模式的世界!\n";//創建命令對象CommandBase* command = new ConcreteCommend();CommandBase* command1 = new ConcreteCommend1();//創建調用者Invoker invoker;invoker.setCommend(command);invoker.execte();invoker.setCommend(command1);invoker.execte();
}
#pragma once
#include <iostream>
using namespace std;//接受者類
class Receiver {
public:Receiver() {}~Receiver() {}void execte() {cout << "Receiver 接收者對象執行操作函數" << endl;}
};//命令基類
class CommandBase
{
public:CommandBase() {}~CommandBase() {}virtual bool execte() = 0;
};//具體命令,不使用接受者
class ConcreteCommend : public CommandBase {
public:ConcreteCommend() {}~ConcreteCommend() {}bool execte() {cout << "ConcreteCommend 沒有使用接受者的命令對象" << endl;return true;}
};//具體命令,使用接受者
class ConcreteCommend1 : public CommandBase {
public:ConcreteCommend1() {}~ConcreteCommend1() {}bool execte() {cout << "ConcreteCommend1 使用接受者的命令對象" << endl;m_receiver = new Receiver();m_receiver->execte();return true;}
private:Receiver* m_receiver;
};//調用者
class Invoker {
public:Invoker() {}~Invoker() {}void setCommend(CommandBase * command) {m_command = command;}void execte() {m_command->execte();}
private:CommandBase* m_command;};

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

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

相關文章

Maven的學習以及安裝配置 2024/3/1 idea

1. Maven的安裝 1.1 首先查看編程工具合適的Maven版本 我使用的是2024/3/1 版本的idea&#xff0c;接下來我會用這個版本的idea進行演示。idea沒有漢化的也可以參考我的步驟。 1、打開idea的設置&#xff0c;搜索Maven&#xff0c;進入Maven設置。 我們可以看到&#xff0c;…

基于 Docker 的跨平臺鏡像構建與增量更新實戰指南

引言&#xff1a;破解容器化兩大核心問題 在實際開發中&#xff0c;我們常常面臨兩個棘手問題&#xff1a; 跨平臺兼容性&#xff1a;如何在Windows平臺開發的鏡像&#xff0c;無縫運行在 ARM64 服務器&#xff1f;更新效率低下&#xff1a;每次代碼調整都要重新安裝全部依賴…

支付通道開通對接一般需要多少錢

不少老板都想開通AIP線上接口&#xff0c;但是不知道這個成本到底是多少? 其實目前第三方支付公司對外提供了標準的線上接入技術方案&#xff0c;一般以API、SDK等形式。因此&#xff0c;商戶在完成簽約審核后&#xff0c;可以順利拿到技術的密鑰&#xff0c;正常調用第三方支…

什么是 spring 的循環依賴?

什么是 spring 的循環依賴&#xff1f; 首先&#xff0c;認識一下什么是循環依賴&#xff0c;舉個例子&#xff1a;A 對象被 Spring 管理&#xff0c;并且引入的 B 對象&#xff0c;同樣的 B 對象也被 Spring 管理&#xff0c;并且也引入的 A 對象。這種相互被引用的情況&#…

thrift軟件、.thrif文件和thrift協議是什么關系,有什么用

Thrift軟件、.thrift文件和Thrift協議是Apache Thrift框架的三個核心組成部分&#xff0c;它們協同實現跨語言服務的高效開發與通信。以下是三者關系及作用的詳細解析&#xff1a; 一、核心組件關系 1. Thrift軟件&#xff08;框架&#xff09; ? 定位&#xff1a;Apache Th…

STM32旋轉編碼器驅動詳解:方向判斷、卡死處理與代碼分析 | 零基礎入門STM32第四十八步

主題內容教學目的/擴展視頻旋轉編碼器電路原理&#xff0c;跳線設置&#xff0c;結構分析。驅動程序與調用。熟悉電路和驅動程序。 師從洋桃電子&#xff0c;杜洋老師 &#x1f4d1;文章目錄 一、旋轉編碼器原理與驅動結構1.1 旋轉編碼器工作原理1.2 驅動程序結構 二、方向判斷…

elementplus的cascader級聯選擇器在懶加載且多選時的一些問題分析

1. 背景 在之前做的一個項目中使用到了element的級聯選擇器&#xff0c;并且是需要懶加載、多選、父子不關聯等等&#xff0c;在選的時候當然沒問題&#xff0c;但是回顯的時候就會回顯不出來&#xff0c;相信大部分伙伴都遇到過這個問題。我在以前出過一篇文章寫過關于級聯選…

【Python運維】用Python自動化AWS資源管理:利用boto3實現高效管理S3桶和EC2實例

《Python OpenCV從菜鳥到高手》帶你進入圖像處理與計算機視覺的大門! 解鎖Python編程的無限可能:《奇妙的Python》帶你漫游代碼世界 隨著云計算的普及,AWS(Amazon Web Services)已經成為許多企業和開發者首選的云平臺。為了提高工作效率,自動化管理AWS資源成為了一個熱…

淘寶關鍵字搜索接口爬蟲測試實戰指南

在電商數據分析和市場研究中&#xff0c;通過關鍵字搜索獲取淘寶商品信息是一項重要任務。淘寶開放平臺提供了 item_search 接口&#xff0c;允許開發者通過關鍵字搜索商品&#xff0c;并獲取商品列表及相關信息。本文將詳細介紹如何設計并測試一個基于該接口的爬蟲程序&#x…

【Linux實踐系列】:用c語言實現一個shell外殼程序

&#x1f525;本文專欄&#xff1a;Linux Linux實踐項目 &#x1f338;博主主頁&#xff1a;努力努力再努力wz 那么今天我們就要進入Linux的實踐環節&#xff0c;那么我們之前學習了進程控制相關的幾個知識點&#xff0c;比如進程的終止以及進程的等待和進程的替換&#xff0c;…

?算法OJ?N-皇后問題 II【回溯剪枝】(C++實現)N-Queens II

?算法OJ?N-皇后問題【回溯剪枝】&#xff08;C實現&#xff09;N-Queens 問題描述 The n-queens puzzle is the problem of placing n n n queens on an n n n \times n nn chessboard such that no two queens attack each other. Given an integer n, return the num…

03.06 QT

一、使用QSlider設計一個進度條&#xff0c;并讓其通過線程自己動起來 程序代碼&#xff1a; <1> Widget.h: #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QThread> #include "mythread.h"QT_BEGIN_NAMESPACE namespace Ui {…

Spring WebFlux 中 WebSocket 使用 DataBuffer 的注意事項

以下是修改后的完整文檔&#xff0c;包含在多個多線程環境中使用 retain() 和 release() 方法的示例&#xff0c;且確保在 finally 塊中調用 release()&#xff1a; 在 Spring WebFlux 中&#xff0c;WebSocketMessage 主要用于表示 WebSocket 的消息載體&#xff0c;其中 getP…

【CSS】Tailwind CSS 與傳統 CSS:設計理念與使用場景對比

1. 開發方式 1.1 傳統 CSS 手寫 CSS&#xff1a;你需要手動編寫 CSS 規則&#xff0c;定義類名、ID 或元素選擇器&#xff0c;并為每個元素編寫樣式。 分離式開發&#xff1a;HTML 和 CSS 通常是分離的&#xff0c;HTML 中通過類名或 ID 引用 CSS 文件中的樣式。 示例&#…

2025華為OD機試真題E卷 - 螺旋數字矩陣【Java】

題目描述 疫情期間,小明隔離在家,百無聊賴,在紙上寫數字玩。他發明了一種寫法:給出數字個數 n (0 < n ≤ 999)和行數 m(0 < m ≤ 999),從左上角的 1 開始,按照順時針螺旋向內寫方式,依次寫出2,3,…,n,最終形成一個 m 行矩陣。小明對這個矩陣有些要求: 1、…

地下井室可燃氣體監測裝置:守護地下安全,防患于未“燃”!

在城市的地下&#xff0c;隱藏著無數的燃氣管道和井室&#xff0c;它們是城市基礎設施建設的重要部分&#xff0c;燃氣的使用&#xff0c;給大家的生活提供了極大的便利。在便利生活的背后&#xff0c;也存在潛在的城市安全隱患。 近年來&#xff0c;地下井室可燃氣體泄漏事故…

【使用hexo模板創建個人博客網站】

使用hexo模板創建個人博客網站 環境準備node安裝hexo安裝ssh配置 使用hexo命令搭建個人博客網站hexo命令 部署到github創建倉庫修改_config.yml文件 編寫博客主題擴展 環境準備 node安裝 進入node官網安裝node.js 使用node -v檢查是否安裝成功 安裝成功后應該出現如上界面 …

C# OPC DA獲取DCS數據(提前配置DCOM)

OPC DA配置操作手冊 配置完成后&#xff0c;訪問遠程ip&#xff0c;就能獲取到服務 C#使用Interop.OPCAutomation采集OPC DA數據&#xff0c;支持訂閱&#xff08;數據變化&#xff09;、單個讀取、單個寫入、斷線重連

發行思考:全球熱銷榜的頻繁變動

幾點雜感&#xff1a; 1、單機游戲銷量與在線人數的衰退是劇烈的&#xff0c;有明顯的周期性&#xff0c;而在線游戲則穩定很多。 如去年的某明星游戲&#xff0c;最高200多萬在線&#xff0c;如今在線人數是48名&#xff0c;3萬多。 而近期熱門的是MH&#xff0c;在線人數8…

Unity自定義區域UI滑動事件

自定義區域UI滑動事件 介紹制作1.創建一個Image2.創建腳本 總結 介紹 一提到滑動事件聯想到有太多的插件了比如EastTouchBundle&#xff0c;今天想單純通過UI去做一個滑動事件而不是基于Box2d或者Box去做滑動事件。 制作 1.創建一個Image 2.創建腳本 using UnityEngine; us…