首页 > 其他 > 详细

设计模式--迭代器模式

时间:2020-03-14 10:02:52      阅读:75      评论:0      收藏:0      [点我收藏+]

一、概述

    迭代器模式(Iterator):迭代器这个词在Java中已经实现,用Iterator迭代器对集合进行遍历,提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部方法。

    主要体现不暴露内部方法,实际感觉有点太封装了。

    角色分析:

     A:抽象迭代器接口(Iterator). 定义迭代器的方法与行为。

     B:具体迭代器(ConcreteIterator).实现迭代器的方法与行为。

     C:抽象聚合接口(Aggregate). 定义聚合类,实际就是有增加、删除数据的集合。

     D:具体聚合(ConcreteAggregate),实现聚合类。

     E:客户端类(Client)

 

二、简单例子

     A:抽象迭代器接口(Iterator). 定义迭代器的方法与行为。

技术分享图片
 1 package comm.pattern.action.iterator;
 2 
 3 /**
 4  * 
 5  * @Title: Iterator.java
 6  * @Package: comm.pattern.action.iterator
 7  * @Description: 迭代器抽象类
 8  * @author yangzhancheng
 9  * @2020年3月14日:上午12:29:08
10  *
11  */
12 public interface Iterator {
13 
14     //第一个
15     Object first();
16     
17     //下一个
18     Object next();
19     
20     //是否还有下一个
21     boolean hasNext();
22     
23 }
View Code

 

     B:具体迭代器(ConcreteIterator).实现迭代器的方法与行为。

技术分享图片
 1 package comm.pattern.action.iterator;
 2 
 3 import java.util.List;
 4 
 5 /**
 6  * 
 7  * @Title: ConcreteIterator.java
 8  * @Package: comm.pattern.action.iterator
 9  * @Description: 实现迭代器类
10  * @author yangzhancheng
11  * @2020年3月14日:上午12:28:41
12  *
13  */
14 public class ConcreteIterator implements Iterator {
15 
16     private List<Object> aggreList = null;
17 
18     private int index = -1;
19 
20     public ConcreteIterator(List<Object> aggreList) {
21         this.aggreList = aggreList;
22     }
23 
24     @Override
25     public Object first() {
26         index = 0;
27         Object obj = aggreList.get(index);
28         return obj;
29     }
30 
31     @Override
32     public Object next() {
33         Object obj = null;
34         if (this.hasNext()) {
35             obj = aggreList.get(++index);
36         }
37         return obj;
38     }
39 
40     @Override
41     public boolean hasNext() {
42         if (index < aggreList.size() - 1) {
43             return true;
44         } else {
45             return false;
46         }
47     }
48 
49 }
View Code

 

     C:抽象聚合接口(Aggregate). 定义聚合类,实际就是有增加、删除数据的集合。

技术分享图片
 1 package comm.pattern.action.iterator;
 2 
 3 /**
 4  * 
 5  * @Title: Aggregate.java
 6  * @Package: comm.pattern.action.iterator
 7  * @Description: 集合类,有增加,删除,主要本身需要引入迭代器
 8  * @author yangzhancheng
 9  * @2020年3月14日:上午12:24:55
10  *
11  */
12 public interface Aggregate {
13 
14     //增加对象
15     public void add(Object obj);
16 
17     //删除对象
18     public void remove(Object obj);
19 
20     //初始化迭代器
21     public Iterator iterator();
22 
23 }
View Code

 

     D:具体聚合(ConcreteAggregate),实现聚合类。

技术分享图片
 1 package comm.pattern.action.iterator;
 2 
 3 import java.util.ArrayList;
 4 import java.util.List;
 5 
 6 /**
 7  * 
 8  * @Title: ConcreteAggregate.java
 9  * @Package: comm.pattern.action.iterator
10  * @Description: 实现聚合类
11  * @author yangzhancheng
12  * @2020年3月14日:上午12:28:10
13  *
14  */
15 public class ConcreteAggregate implements Aggregate{
16 
17     private List<Object> list = new ArrayList<Object>(); 
18     
19     //增加对象
20     public void add(Object obj){
21         list.add(obj);
22     }
23     
24 
25     //删除对象
26     public void remove(Object obj){
27         list.remove(obj); 
28     }
29 
30     //初始化迭代器
31     public Iterator iterator(){
32         return new ConcreteIterator(list);
33     }
34 }
View Code

 

     E:客户端类(Client)

技术分享图片
 1 package comm.pattern.action.iterator;
 2 
 3 /**
 4  * 
 5  * @Title: Client.java
 6  * @Package: comm.pattern.action.iterator
 7  * @Description: 客户端实现类
 8  * @author yangzhancheng
 9  * @2020年3月14日:上午12:27:51
10  *
11  */
12 public class Client {
13 
14     public static void main(String[] args) {
15 
16         Aggregate ag = new ConcreteAggregate();
17         ag.add("中山实验小学三年(1)班");
18         ag.add("中山实验小学三年(2)班");
19         ag.add("中山实验小学三年(3)班");
20         
21         System.out.println("聚合的内容有:");
22         
23         Iterator it = ag.iterator();
24         
25         while (it.hasNext()) {
26             Object ob = it.next();
27             System.out.println(ob.toString());
28         }
29         
30 
31     }
32 
33 }
View Code

 

    运行结果

聚合的内容有:
中山实验小学三年(1)班
中山实验小学三年(2)班
中山实验小学三年(3)班

 

三、总结

     java中迭代器的源代码,后续奉献上。

设计模式--迭代器模式

原文:https://www.cnblogs.com/fating/p/12490173.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!