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

简介: 一:迭代器模式的定义        --->迭代器模式(Iterator Pattern)目前已经是一个没落的模式,基本上没人会单独写一个迭代器,除非是产品性质的开发        --->它提供一种方法访问一个容器对象中各个元素,而又不需暴露该对象的内部细节。

一:迭代器模式的定义
        --->迭代器模式(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

 

相关文章
|
4月前
|
设计模式 Java
Java设计模式【十七】:迭代器模式
Java设计模式【十七】:迭代器模式
30 0
|
6月前
|
设计模式 C++ 容器
设计模式之迭代器模式(C++)
设计模式之迭代器模式(C++)
|
4月前
|
设计模式
二十三种设计模式全面解析-组合模式与迭代器模式的结合应用:构建灵活可扩展的对象结构
二十三种设计模式全面解析-组合模式与迭代器模式的结合应用:构建灵活可扩展的对象结构
|
6月前
|
设计模式 存储 Java
【设计模式——学习笔记】23种设计模式——迭代器模式Iterator(原理讲解+应用场景介绍+案例介绍+Java代码实现)
【设计模式——学习笔记】23种设计模式——迭代器模式Iterator(原理讲解+应用场景介绍+案例介绍+Java代码实现)
27 0
|
6月前
|
设计模式
设计模式14 - 迭代器模式【Iterator Pattern】
设计模式14 - 迭代器模式【Iterator Pattern】
15 0
|
5天前
|
设计模式 Java
小谈设计模式(21)—迭代器模式
小谈设计模式(21)—迭代器模式
|
1月前
|
设计模式 存储 算法
【设计模式】迭代器模式
【设计模式】迭代器模式
|
3月前
|
设计模式 Java 数据挖掘
聊聊Java设计模式-迭代器模式
迭代器(Iterator)模式,也叫做游标(Cursor)模式。我们知道,在Java 容器中,为了提高容器遍历的方便性,我们利用迭代器把遍历逻辑从不同类型的集合类中抽取出来,从而避免向外部暴露集合容器的内部结构。
43 0
聊聊Java设计模式-迭代器模式
|
3月前
|
设计模式 算法 Go
Golang设计模式——07迭代器模式
Golang设计模式——07迭代器模式
23 0
|
3月前
|
设计模式 前端开发 索引
【设计模式】之迭代器模式
迭代器模式是一种非常有用的设计模式,在前端开发中可以帮助我们更好地管理和操作数据集合。它通过封装集合对象的内部结构,并提供统一的遍历方式,使得代码更加简洁、可维护和可扩展。然而,在使用迭代器模式时需要权衡其优缺点,并根据具体情况进行选择。
41 0