设计模式_迭代器模式

迭代器模式

介绍

设计模式定义案例
迭代器模式行为型:关注对象与行为的分离
提供了一种统一的方式来访问多个不同的集合
两个集合:使用了不同的数据存储方式
学生 和 警察

查询显示出集合的内容 ,使用相同的代码
问题堆积在哪里解决办法
不同的存储方式

统一集合查询代码
1 统一出一个存储方式
2 设计一个查询基类来统一查询代码
3 每个集合提供
  1 统一存储方式,
  2 一个查询实现(接口迭代器的实现)

类图

代码

interface BaseIterator<T>

/// <summary>
/// 迭代器基类
/// </summary>
public interface BaseIterator<T>
{// 当前T Current();// 下一个bool MoveNext();// 重新开始void Reset();
}

IteratorPolice 

using System.Collections.Generic;public class IteratorPolice : BaseIterator<People>
{// 列表List<People> listPeople = null;// 下标int currentIndex = -1;  IteratorPolice() { }public IteratorPolice(List<People> list){listPeople = list;}public People Current(){if (null == listPeople)return null;if (listPeople.Count < currentIndex)return null;return listPeople[currentIndex];}public bool MoveNext(){if (null == listPeople)return false;if (listPeople.Count > ++currentIndex)return true;return false;}public void Reset(){currentIndex = -1;}
}

IteratorStudent 


using System.Collections.Generic;public class IteratorStudent : BaseIterator<People>
{// 列表List<People> listPeople = null;// 下标int currentIndex = -1;IteratorStudent() { }public IteratorStudent(List<People> list){listPeople = list;}public People Current(){if (null == listPeople)return null;if (listPeople.Count < currentIndex)return null;return listPeople[currentIndex];}public bool MoveNext(){if (null == listPeople)return false;if (listPeople.Count > ++currentIndex)return true;return false;}public void Reset(){currentIndex = -1;}}

People


public class People
{public string name;public int age;public bool married;
}

StudentList

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class StudentList
{private List<People> list = new List<People>();private People[] studentList = new People[3];public StudentList(){People p1 = new People(){name = "WH",age = 15,married = false};studentList[0] = p1;People p2 = new People(){name = "QT",age = 16,married = false};studentList[1] = p2;People p3 = new People(){name = "YY",age = 15,married = false};studentList[2] = p3;for (int i = 0; i < studentList.Length; i++){list.Add(studentList[i]);}}public BaseIterator<People> GetIterator(){return new IteratorStudent(list);}
}

PoliceList


using System.Collections.Generic;public class PoliceList
{private List<People> list = new List<People>();public PoliceList(){People p1 = new People(){name = "WangQiang",age = 23,married = false};list.Add(p1);People p2 = new People(){name = "ZhangQiang",age = 30,married = true};list.Add(p2);People p3 = new People(){name = "LingQiang",age = 31,married = true};list.Add(p3);}public BaseIterator<People> GetIterator(){return new IteratorPolice(list); }
}

测试代码

using UnityEngine;public class TestDDQ : MonoBehaviour
{void Start(){{PoliceList pl = new PoliceList();BaseIterator<People> iterator = pl.GetIterator();while (iterator.MoveNext()){People p1 = iterator.Current();Debug.Log("姓名:" + p1.name + "   年龄:" + p1.age + "   是否结婚:" + p1.married + " ");}}Debug.Log("------------------------------------------------------------------");{StudentList pl = new StudentList();BaseIterator<People> iterator = pl.GetIterator();while (iterator.MoveNext()){People p1 = iterator.Current();Debug.Log("姓名:" + p1.name + "   年龄:" + p1.age + "   是否结婚:" + p1.married + " ");}}}
}

结果

总结

迭代器模式统一集合查询代码,以这个为目标进现优化总结出的一个经验。

还是为了更深刻的理解设计原理和优化手段。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/160761.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安达发|AI算法全方位打造制造业AI智能化工厂的超级大脑

随着科技的不断进步&#xff0c;人工智能已经成为了我们生活中不可或缺的一部分。在制造业中&#xff0c;AI技术也正在发挥着越来越重要的作用。而APS系统&#xff0c;则是AI技术在制造业中的一个重要应用。 那么&#xff0c;什么是APS系统呢&#xff1f;简单来说&#xff0c;A…

AI 悄然变天:这家平台为何能俘获众多明星大模型「芳心」?

整个AI领域&#xff0c;GPT-4 发布无疑成为载入 AI 史册的大事件。但其还留下来一些发展空间&#xff0c;其不可能把所有的事情都做完。比如&#xff0c;涉及小数、分数的运算&#xff0c;GPT-4 可能给不出正确答案&#xff08;其多位乘法运算准确率仅为 4.3%&#xff09;。 可…

spring java 动态获取consul K/V

spring java 动态获取consul K/V 1.springConsul配置kv路径 spring:cloud:consul:enabled: ${CONSUL_ENABLED:true}host: ${CONSUL_HOST:localhost}port: ${CONSUL_PORT:8500}config:prefix: ${CONSUL_CONFIG_PREFIX:config} #consul kv前缀fail-fast: ${CONFIG_FAIL_FAST:fa…

ORA-12541:TNS:no listener 无监听程序

问题截图 解决方法 1、删除Listener 新建一个新的 2、主机为服务器ip 3、设置数据库环境 只需要设置实例名不需要设置路径 4、服务命名 一样设置为ip 服务名与监听名一直 eg&#xff1a;orcl

Sketch macOS 支持m1 m2 Sketch 2023最新中文版

SketchUp Pro 2023是一款功能强大的三维建模软件&#xff0c;适用于建筑设计师、室内设计师、工程师和其他创意专业人士。以下是SketchUp Pro 2023的一些主要特点和功能&#xff1a; 三维建模&#xff1a;SketchUp Pro 2023允许用户以直观的方式创建三维模型。通过简单的绘图工…

aidl的注意事项

该篇继承自上一篇&#xff0c;上一篇也有一部分的注意事项&#xff0c;这一篇把其他的情况列出 一 客户段和服务端的aidl文件下的package名字要是一样的 二 server中的 manifest中的package名字&#xff0c;这个与上面两个包不能相同&#xff0c;不然在客户端设置intent的pa…

Java每日笔试题错题分析(6)

Java每日笔试题错题分析&#xff08;6&#xff09; 一、错题知识点前瞻第1题第2题第3题第4题 二、错题展示及其解析第1题第2题第3题第4题 一、错题知识点前瞻 第1题 被动引用&#xff08;免初始化&#xff09; 提示&#xff1a; 第2题 本题考查的含义&#xff0c;对于两个引用…

在全志R128上启用USB ADB以及无线ADB配置方法

首先在FreeRTOS的环境下&#xff0c;选择r128_c906_pro&#xff1a; source envsetup.sh lunch_rtos r128s2_pro_c906USB ADB的配置比较常规&#xff0c;注意以下几个驱动的勾选 usb device驱动adb gadget驱动adbd应用 运行menuconfig&#xff0c;选择对应的驱动以及软件包&…

基于YOLO算法的单目相机2D测量(工件尺寸和物体尺寸)三

1.简介 1.1 2D测量技术 基于单目相机的2D测量技术在许多领域中具有重要的背景和意义。 工业制造&#xff1a;在工业制造过程中&#xff0c;精确测量是确保产品质量和一致性的关键。基于单目相机的2D测量技术可以用于检测和测量零件尺寸、位置、形状等参数&#xff0c;进而实…

天锐绿盾透明加密、半透明加密、智能加密这三种不同加密模式的区别和适用场景——@德人合科技-公司内部核心文件数据、资料防止外泄系统

由于企事业单位海量的内部数据存储情况复杂&#xff0c;且不同公司、不同部门对于文件加密的需求各不相同&#xff0c;单一的加密系统无法满足多样化的加密需求。天锐绿盾企业加密系统提供多种不同的加密模式&#xff0c;包括透明加密、半透明加密和智能加密&#xff0c;用户可…

【网络安全 --- win10系统安装】win10 系统详细安装过程(提供资源)

一&#xff0c;资源下载 百度网盘镜像下载地址链接&#xff1a; 百度网盘 请输入提取码百度网盘为您提供文件的网络备份、同步和分享服务。空间大、速度快、安全稳固&#xff0c;支持教育网加速&#xff0c;支持手机端。注册使用百度网盘即可享受免费存储空间https://pan.ba…

leetcode-48.旋转图像

1. 题目 leetcode题目链接 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像&#xff0c;这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 2. 编程 矩阵转置&#xff1a; 遍历矩阵&#x…

计算机网络第2章-DNS(3)

DNS&#xff1a;因特网的目录服务 在因特网上&#xff0c;主机和人类都一样&#xff0c;可以用很多种方式进行标识&#xff0c;主机的一种标识方法是它的主机名。 但是主机名一般是用IP来表示&#xff0c;IP是由四个字节组成&#xff0c;并且有严格的层次结构&#xff0c;不利…

1347. 制造字母异位词的最小步骤数 (中等,Counter)

闲来无事&#xff0c;今天多做一题 条件很宽&#xff0c;可以任意替换&#xff0c;且排列相同也可以所以只要统计每个字母在 s 中比在 t 中多出现的次数之和即可 class Solution:def minSteps(self, s: str, t: str) -> int:n [0] * 26for i in s:n[ord(i) - ord(a)] 1f…

2023亿发智能数字化解决方案供应商,贵州一体化企业信息管理系统

企业数字化服务的解决方案是指运用数字技术对企业运营进行全方位的数字化升级和优化&#xff0c;提供以数字化服务为核 心的全面解决方案&#xff0c;解决企业在数字化转型过程中面临的技术和业务难题。 数字化服务解决方案的功能 在数字化时代的背景下&#xff0c;贵州企业的…

内网和热点同时连接使用配置

解决如标题问题 查看当前永久路由信息 route print截图保存(重要) 截图保存(重要)查出来的永久路由&#xff0c;以防配置不成功时回退&#xff0c;回退方法就是下面的“添加永久路由” 删除当前的路由 0.0.0.0 是上面查出的网络地址 route delete 0.0.0.0内网IP信息 添加永久…

Pytorch:cat、stack、squeeze、unsqueeze的用法

Pytorch&#xff1a;cat、stack、squeeze、unsqueeze的用法 torch.cat 在指定原有维度上链接传入的张量&#xff0c;所有传入的张量都必须是相同形状 torch.cat(tensors, dim0, *, outNone) → Tensor tensor:相同形状的tensor dim:链接张量的维度&#xff0c;不能超过传入张…

讲解嵌入式软件中超时机制设计

软件超时机制 1、背景 在嵌入式软件程序设计过程中中&#xff0c;经常会遇到超时&#xff08;或定时&#xff09;的处理情况&#xff0c;基本处理思想是在时间到的时候进行相关程序处理&#xff0c;下面介绍两种超时&#xff08;或定时&#xff09;的程序设计方案。 2、方案…

Python面向对象编程

Python面向对象 1. 面向对象2. 创建简单类3. 属性4. 魔法方法5. 继承 1. 面向对象 面向对象编程 OOP&#xff1a;&#xff08;Object-Oriented Programming&#xff09;是一种将数据和相关操作封装在一起的编程方式 类&#xff1a;对一系列具有相同特征和行为的食物的统称&…

Python —— hou.Node class

Houdini内所有节点&#xff08;Object、SOP、COP等&#xff09;的基类&#xff0c;该类的实例对应houdini内的节点&#xff1b; 每个节点都有一个唯一的路径&#xff08;定义其在节点树内的位置&#xff09;&#xff1b;节点路径层次结构类似于文件系统中的文件和文件夹的层次结…