设计模式一迭代器模式


欢迎光临我的博客[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 }
posted @ 2019-07-31 22:19  LittleDonkey  阅读(173)  评论(0编辑  收藏  举报