feat: 迭代器模式

This commit is contained in:
Bunny 2025-02-03 17:35:00 +08:00
parent b90a5bef13
commit 9d0baa8d71
3 changed files with 168 additions and 3 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

View File

@ -1098,7 +1098,7 @@ public class Adapter3 {
--- ---
## 组合模式---结构型 ## 组合模式---结构型1
--- ---
@ -1106,7 +1106,7 @@ public class Adapter3 {
--- ---
## 代理模式---结构型 ## 代理模式---结构型1
--- ---
@ -1604,7 +1604,7 @@ public class BakeDemo {
--- ---
## 状态模式---行为型 ## 状态模式---行为型1
--- ---
@ -1817,6 +1817,97 @@ public class Memo {
## 迭代器模式---行为型 ## 迭代器模式---行为型
**定义:**提供一种方法顺序访问一个聚合对象中的哥哥元素,而不是暴露其内部的表示。
![image-20250203173419155](./images/设计模式-v2/image-20250203173419155.png)
需要角色:抽象迭代器、具体迭代器、抽象聚合类、具体聚合类。
### 简单示例
#### 示例代码
```java
public class Iterator {
public static void main(String[] args) {
ListContainer listContainer = new ListContainer();
listContainer.add("序号1");
listContainer.add("序号2");
listContainer.add("序号3");
listContainer.add("序号4");
MyIterator iterator = listContainer.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
// 迭代器接口
interface MyIterator {
boolean hasNext();
Object next();
}
// 定义容器
interface MyContainer {
void add(Object o);
void remove(Object o);
MyIterator iterator();
}
// 列表操作容器
static class ListContainer implements MyContainer {
private final List<Object> list = new ArrayList<>();
@Override
public void add(Object o) {
list.add(o);
}
@Override
public void remove(Object o) {
list.remove(o);
}
@Override
public MyIterator iterator() {
return new MyIteratorImpl();
}
class MyIteratorImpl implements MyIterator {
private int index = 0;
@Override
public boolean hasNext() {
return index < list.size();
}
@Override
public Object next() {
Object object = list.get(index);
index++;
return object;
}
}
}
}
```
#### 运行结果:
```java
序号1
序号2
序号3
序号4
```
--- ---
## 访问者模式---行为型 ## 访问者模式---行为型

View File

@ -0,0 +1,74 @@
package cn.bunny.pattern13;
import java.util.ArrayList;
import java.util.List;
public class Iterator {
public static void main(String[] args) {
ListContainer listContainer = new ListContainer();
listContainer.add("序号1");
listContainer.add("序号2");
listContainer.add("序号3");
listContainer.add("序号4");
MyIterator iterator = listContainer.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
// 迭代器接口
interface MyIterator {
boolean hasNext();
Object next();
}
// 定义容器
interface MyContainer {
void add(Object o);
void remove(Object o);
MyIterator iterator();
}
// 列表操作容器
static class ListContainer implements MyContainer {
private final List<Object> list = new ArrayList<>();
@Override
public void add(Object o) {
list.add(o);
}
@Override
public void remove(Object o) {
list.remove(o);
}
@Override
public MyIterator iterator() {
return new MyIteratorImpl();
}
class MyIteratorImpl implements MyIterator {
private int index = 0;
@Override
public boolean hasNext() {
return index < list.size();
}
@Override
public Object next() {
Object object = list.get(index);
index++;
return object;
}
}
}
}