原创作者:郑同学的笔记
原创地址:https://zhengjunxue.blog.csdn.net/article/details/132611595
qq技术交流群:921273910
类型 | 序号 | 设计模式 | 描述 |
行为模式 | 1 | 责任链模式 (Chain of Responsibility) |
将这些处理者连成一条链。 链上的每个处理者都有一个成员变量来保存下一个处理者。 |
2 | 命令模式 (Command Pattern) |
它将请求封装为一个对象,从而使得可以用不同的请求对客户端进行参数化或将请求放入队列中 | |
3 | 迭代器模式 (Iterator Pattern) |
它提供了一种顺序访问聚合对象中各个元素的方法,而不暴露其内部表示。 | |
4 | 中介者模式 (Mediator Pattern) |
通过中介对象进行通信,从而降低了对象之间的耦合性。 | |
5 | 备忘录模式 (Memento Pattern) |
当需要保存和恢复对象的状态时,可以使用备忘录模式。 | |
6 | 观察者模式 (Observer Pattern) |
当一个对象的状态发生改变时,所有依赖它的对象都会自动收到通知并更新。 | |
7 | 策略模式 (Strategy Pattern) |
定义了一系列算法,并将每个算法封装起来,使它们可以相互替换。客户端代码在运行时选择所需的算法。 | |
8 | 状态模式 (State Pattern |
是在一个类的内部会有多种状态的变化,因为状态变化从而导致其行为的改变,在类的外部看上去这个类就像是自身发生了改变一样。 | |
9 | 模板方法模式 (Template Method Pattern) |
定义了算法的基本骨架,而具体方法则由子类提供具体实现。 | |
10 | 访问者模式 (Visitor Pattern) |
访问者定义了针对不同元素的操作方法,而元素则是被访问者访问的对象。 |
迭代器模式(Iterator Pattern)是一种行为型设计模式,它提供了一种访问一个容器对象中各个元素的方法,而又不需要暴露该对象的内部表示。通过使用迭代器模式,可以遍历一个聚合对象(比如一个集合)的元素,而不需要暴露该对象的内部表示。
一、定义
迭代器模式定义了一个迭代器接口(Iterator),该接口包含了对容器对象(如列表或集合)进行遍历的方法。具体容器对象(Concrete Collection)实现了迭代器接口,并且提供了创建迭代器对象的方法。迭代器对象(Iterator Object)封装了对容器对象的访问和遍历逻辑。
二、适用场景
迭代器模式适用于以下情况:
- 当需要遍历一个对象的元素,并且不想暴露该对象的内部表示时,可以使用迭代器模式。
- 当需要统一对不同类型的聚合对象进行遍历时,可以使用迭代器模式。
- 当需要提供多种遍历方式,并且这些遍历方式可以独立于聚合对象变化时,可以使用迭代器模式。
三、过程
迭代器模式的过程包括以下几个角色:
迭代器接口(Iterator Interface):定义访问和遍历聚合对象中元素的方法。
具体迭代器(Concrete Iterator):实现迭代器接口,封装了对聚合对象的遍历算法。
聚合对象接口(Aggregate Interface):定义创建迭代器对象的方法。
具体聚合对象(Concrete Aggregate):实现聚合对象接口,返回具体的迭代器对象。
四、迭代器模式类图
迭代器模式是一个很经典的模式。所以没必要重复的去造这个轮子,成型的类库都非常好的实现了迭代器模式,在使用这些类库提供的容器时,并不需要我们亲自去实现对应的迭代器,比如 STL。但是,打铁还需自身硬,对于这些必备技能我们是没有理由不去学习和掌握的。
五、C++示例代码
以下是一个使用迭代器模式的示例代码,在这个示例中,我们将以一个简单的集合类为例,展示如何使用迭代器模式来遍历集合中的元素:
cpp
#include <iostream>
#include <vector>
// 迭代器接口
class Iterator {
public:
virtual bool hasNext() = 0;
virtual int next() = 0;
};
// 具体迭代器
class ConcreteIterator : public Iterator {
private:
std::vector<int> collection;
int index;
public:
explicit ConcreteIterator(std::vector<int> collection) : collection