码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式之禅之设计模式-迭代器模式

时间:2016-01-21 18:31:12      阅读:215      评论:0      收藏:0      [点我收藏+]

标签:

一:迭代器模式的定义
        --->迭代器模式(Iterator Pattern)目前已经是一个没落的模式,基本上没人会单独写一个迭代器,除非是产品性质的开发
        --->它提供一种方法访问一个容器对象中各个元素,而又不需暴露该对象的内部细节。
        --->迭代器是为容器服务的,那什么是容器呢? 能容纳对象的所有类型都可以称之为容器,例如Collection集合类型、Set类型等,迭代器模式就是为解决遍历这些容器中的元素而诞生的
        --->迭代器模式提供了遍历容器的方便性,容器只要管理增减元素就可以了,需要遍历时交由迭代器进行。



二:迭代器模式的角色
● Iterator抽象迭代器
        抽象迭代器负责定义访问和遍历元素的接口,而且基本上是有固定的3个方法:first()获得第一个元素,next()访问下一个元素,isDone()是否已经访问到底部(Java叫做hasNext()方法)
● ConcreteIterator具体迭代器
        具体迭代器角色要实现迭代器接口,完成容器元素的遍历。
● Aggregate抽象容器
        容器角色负责提供创建具体迭代器角色的接口,必然提供一个类似createIterator()这样的方法,在Java中一般是iterator()方法。
● Concrete Aggregate具体容器
        具体容器实现容器接口定义的方法,创建出容纳迭代器的对象。


三:迭代器模式的例子
【1】迭代器抽象类

技术分享
 1 package com.yeepay.sxf.template15;
 2 /**
 3  * 迭代器的抽象类
 4  * @author sxf
 5  *
 6  * @param <E>
 7  */
 8 public interface Iterator<E> {
 9     //遍历下一个元素
10     public E next();
11     //是否还有下一个元素
12     public boolean hasNext();
13     //删除当前指向的元素
14     public boolean remove();
15 }
View Code

【2】迭代器实现类

技术分享
 1 package com.yeepay.sxf.template15;
 2 
 3 import java.util.ArrayList;
 4 import java.util.List;
 5 /**
 6  * 自己实现的迭代器
 7  * @author sxf
 8  *
 9  * @param <E>
10  */
11 public class MyItrator<E> implements Iterator<E> {
12 
13     private List<E> list=new ArrayList<E>();
14     
15     private int cursor=0;
16     
17     public MyItrator(List<E> e) {
18         this.list=e;
19     }
20     
21     @Override
22     public E next() {
23         E e=null;
24         if(this.hasNext()){
25             e=this.list.get(this.cursor++);
26         }else{
27             e=null;
28         }
29         return e;
30     }
31 
32     @Override
33     public boolean hasNext() {
34         if(this.cursor==this.list.size()){
35             return false;
36         }else{
37             return true;
38         }
39     }
40 
41     /**
42      * 开发系统时,迭代器的删除方法应该完成两个逻辑:一是删除当前元素,二是当前游标指向下一个元素
43      */
44     @Override
45     public boolean remove() {
46         list.remove(cursor);
47         cursor++;
48         return true;
49     }
50 
51     
52 }
View Code

【3】自定义集合接口

技术分享
 1 package com.yeepay.sxf.template15;
 2 /**
 3  * 集合接口
 4  * @author sxf
 5  *
 6  * @param <E>
 7  */
 8 public interface  Aggregate<E> {
 9     public void add(E object);
10     public void remove(E object);
11     public  Iterator iterator();
12 }
View Code

【4】自定义集合实现

技术分享
 1 package com.yeepay.sxf.template15;
 2 /**
 3  * 自定义集合
 4  */
 5 import java.util.ArrayList;
 6 import java.util.List;
 7 
 8 public class MyConnection<E> implements Aggregate<E>{
 9     private List<E> a=new ArrayList<E>();
10     
11     @Override
12     public void add(E object) {
13         a.add(object);
14     }
15 
16     @Override
17     public void remove(E object) {
18         a.remove(object);
19     }
20 
21     @Override
22     public Iterator iterator() {
23         
24         return new MyItrator<E>(this.a);
25     }
26 
27     
28 }
View Code

【5】客户端实现

技术分享
 1 package com.yeepay.sxf.template15;
 2 
 3 
 4 public class ClientTest {
 5 
 6     
 7     public static void main(String[] args) {
 8         MyConnection<String> st=new MyConnection<String>();
 9         st.add("aaa");
10         st.add("bbb");
11         st.add("ccc");
12         st.add("ddd");
13         Iterator iterator=st.iterator();
14         while (iterator.hasNext()) {
15                 String aString=(String) iterator.next();
16                 System.out.println("ClientTest.main()"+aString);
17             
18         }
19         
20     }
21 }
View Code

 

设计模式之禅之设计模式-迭代器模式

标签:

原文地址:http://www.cnblogs.com/shangxiaofei/p/5148749.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!