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

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

 

时间: 2024-09-25 15:04:02

设计模式之禅之设计模式-迭代器模式的相关文章

设计模式之禅之设计模式-访问者模式

一:访问者模式定义        --->封装一些作用于某种数据结构中的各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作. 二:访问者模式角色● Visitor--抽象访问者        抽象类或者接口,声明访问者可以访问哪些元素,具体到程序中就是visit方法的参数定义哪些对象是可以被访问的.● ConcreteVisitor--具体访问者        它影响访问者访问到一个类后该怎么干,要做什么事情.● Element--抽象元素        接口或者抽象类,声

设计模式之禅之设计模式-原型模式

一:原型模式的定义        --->用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象        --->原型模式(Prototype Pattern)的简单程度仅次于单例模式和迭代器模式.正是由于简单,使用的场景才非常地多        --->原型模式的核心是一个clone方法,通过该方法进行对象的拷贝,Java提供了一个Cloneable接口来标示这个对象是可拷贝的,为什么说是"标示"呢?翻开JDK的帮助看看Cloneable是一个方法都没

设计模式学习笔记(十三)—Iterator迭代器模式

Iterator模式定义: 提供一个方法顺序访问一个聚合对象的各个元素,而又不暴露该对象的内部表示. 这个模式在java的类库中已经实现了,在java中所有的集合类都实现了Conllection接口,而Conllection接口又继承了Iterable接口,该接口有一个iterator方法,也就是所以的集合类都可以通过这个iterator方法来转换成Iterator类,用Iterator对象中的hasnext方法来判断是否还有下个元素,next方法来顺序获取集合类中的对象.今天面试考到设计模式,

.NET设计模式(18):迭代器模式(Iterator Pattern)

概述 在面向对象的软件设计中,我们经常会遇到一类集合对象,这类集合对象的内部结构可能有着各种各样的实现,但是归结起来,无非有两点是需要我们去关心的:一是集合内部的数据存储结构,二是遍历集合内部的数据.面向对象设计原则中有一条是类的单一职责原则,所以我们要尽可能的去分解这些职责,用不同的类去承担不同的职责.Iterator模式就是分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不暴露集合的内部结构,又可让外部代码透明的访问集合内部的数据. 意图 提供一种方法顺序访问一个聚合对象中

设计模式之禅之设计模式-桥梁模式

一:桥梁模式定义        --->桥梁模式(Bridge Pattern)也叫做桥接模式,是一个比较简单的模式        --->将抽象和实现解耦,使得两者可以独立地变化. 二:桥梁模式角色 ● Abstraction--抽象化角色        它的主要职责是定义出该角色的行为,同时保存一个对实现化角色的引用,该角色一般是抽象类.● Implementor--实现化角色        它是接口或者抽象类,定义角色必需的行为和属性.● RefinedAbstraction--修正抽象

设计模式之禅之设计模式-装饰者模式

一:装饰模式的定义        --->动态地给一个对象添加一些额外的职责.就增加功能来说,装饰模式相比生成子类更为灵活.        --->如果大家还记得代理模式,那么很容易看懂这个类图,装饰类的作用也就是一个特殊的代理类.        --->在装饰模式中,必然有一个最基本.最核心.最原始的接口或抽象类充当Component抽象构件 二:装饰模式的角色        ● Component抽象构件                Component是一个接口或者是抽象类,就是定

设计模式之禅之设计模式-策略模式

一:策略模式的定义        --->是一种比较简单的模式,也叫做政策模式        --->定义一组算法,将每个算法都封装起来,并且使它们之间可以互换 二:策略模式的三个角色 ● Context封装角色        --->它也叫做上下文角色,起承上启下封装作用,屏蔽高层模块对策略.算法的直接访问,封装可能存在的变化.● Strategy抽象策略角色        --->策略.算法家族的抽象,通常为接口,定义每个策略或算法必须具有的方法和属性● ConcreteStr

设计模式之禅之设计模式-模板方法模式

一:模板方法模式的定义        --->定义一个操作中的算法的框架,而将一些步骤延迟到子类中.使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤.        --->模板方法模式确实非常简单,仅仅使用了Java的继承机制,但它是一个应用非常广泛的模式.其中,AbstractClass叫做抽象模板,它的方法分为两类:        ● 基本方法                基本方法也叫做基本操作,是由子类实现的方法,并且在模板方法被调用.        ● 模板方法   

设计模式之禅之设计模式-建造者模式

一:建造者模式的定义        --->建造者模式(Builder Pattern)也叫做生成器模式,其定义如下:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示        ● Product产品类                通常是实现了模板方法模式,也就是有模板方法和基本方法,这个参考模板方法模式.例子中的BenzModel和BMWModel就属于产品类.        ● Builder抽象建造者                规范产品的组建,一般是由子类