欢迎光临我的博客[http://poetize.cn],前端使用Vue2,聊天室使用Vue3,后台使用Spring Boot
迭代器(Iterator)模式的定义:
提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。
迭代器模式是一种对象行为型模式,
在客户访问类与聚合类之间插入一个迭代器,这分离了聚合对象与其遍历行为,对客户也隐藏了其内部细节
抽象聚合(Aggregate)角色:
定义存储、添加、删除聚合对象以及创建迭代器对象的接口。
具体聚合(ConcreteAggregate)角色:
实现抽象聚合类,返回一个具体迭代器的实例。
抽象迭代器(Iterator)角色:
定义访问和遍历聚合元素的接口,通常包含 hasNext()、first()、next() 等方法。
具体迭代器(Concretelterator)角色:
实现抽象迭代器接口中所定义的方法,完成对聚合对象的遍历,记录遍历的当前位置。
1 public class Iterator {
2 public static void main(String[] args) {
3 ConcreteAggregate a = new ConcreteAggregate();
4 a.add(1);
5 a.add("小花");
6 a.add(1.1);
7 a.remove(1);
8 Iteratoring iterator = a.getIterator();
9 while (iterator.hasNext()) {
10 System.out.println(iterator.next());
11 }
12 }
13 }
14
15 // 抽象迭代器
16 interface Iteratoring {
17 public boolean hasNext();
18
19 public Object next();
20 }
21
22 //具体迭代器
23 class Concretelterator implements Iteratoring {
24
25 private ArrayList<Object> li;
26
27 public Concretelterator(ArrayList<Object> li) {
28 this.li = li;
29 }
30
31 int count = 0;
32
33 @Override
34 public boolean hasNext() {
35 if (count < li.size()) {
36 return true;
37 }
38 return false;
39 }
40
41 @Override
42 public Object next() {
43 if (hasNext()) {
44 return li.get(count++);
45 }
46 return null;
47 }
48 }
49
50 //抽象聚合
51 interface Aggregate {
52 public void add(Object obj);
53
54 public void remove(Object obj);
55
56 public Iteratoring getIterator();
57 }
58
59 //具体聚合
60 class ConcreteAggregate implements Aggregate {
61
62 private ArrayList arr = new ArrayList();
63
64 @Override
65 public void add(Object obj) {
66 arr.add(obj);
67 }
68
69 @Override
70 public void remove(Object obj) {
71 arr.remove(obj);
72 }
73
74 @Override
75 public Iteratoring getIterator() {
76 return new Concretelterator(arr);
77 }
78 }