您的位置:首页 > 其它

迭代器模式(Iterator Pattern)——管理良好的集合

2017-09-04 00:55 169 查看

前言

​ 最近在大佬的带领下做标签系统。对于我这样 设计真是一个很困难的事情,最难的设计被大佬搞定了。其中在设计使用条件时,针对不同的场景插叙条件、使用规则都不相同,同时需要通过使用规则获取到满足前端需求的足量标签,也就是说,获取到的标签集合还需要遍历每一个标签是否在该场景下可用。大佬的设计就采用了迭代器模式。

​ 于是,我在网上看到这样一个语句片段“迭代器模式(Iterator Pattern)是 Java 和 .Net 编程环境中非常常用的设计模式”。直到这个时候我才由衷的知道自己多菜,同时心底里膜拜了一下我的大佬。

概述

迭代器模式(Iterator Pattern)属于行为模式。提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。

​ 把游走的任务放在迭代器上,而不是聚合上。这样简化了聚合的接口和实现,也让责任各得其所。

涉及的设计原则

单一责任:一个类应该只有一个引起变化的原因。类的每个责任都有改变的钱在区域。超过一个责任,就意味着超过一个改变的区域。

​ 这个原则告诉我们,尽量让每个类都保持单一责任。

​ 内聚用来度量一个类或模块紧密地达到单一目的或者责任。内聚是一个比单一责任原则更普遍概念。遵守单一责任的类容易具有很高的凝聚力,而且比背负很多责任的低内聚类容易维护。

类图



抽象迭代器(Iterator):所有迭代器都需要实现的接口,提供了游走聚合对象元素之间的方法。**

具体迭代器(ConcreteIterator): 利用这个具体的迭代器能够对具体的聚合对象进行遍历。每一个聚合对象都应该对应一个具体的迭代器。

抽象聚合类(Aggregate)

具体聚合类(ConcreteAggregat
4000
e:):
实现creatIterator()方法,返回该聚合对象的迭代器。

设计模式的实现

使用场景

​ 如前言,在标签系统的使用规则中,针对不同的场景,查询条件不一样,同时也要需要做标签的过滤。

代码实现

不做过多表述,贴出一张修改后的类图。



总结

​ 迭代器将遍历的工作封装进一个对象中;

​ 当使用迭代器的时候,我们依赖聚合提供遍历。

​ 迭代器提供了一个通用的接口,让我们遍历聚合的项,当我们编码使用聚合的项时,就可以使用多多态机制了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: