java设计模式:迭代器设计模式

来源:互联网 发布:java判断图片尺寸 编辑:程序博客网 时间:2024/05/01 10:55
package com.selfStudy;import java.util.*;/* *  [结合java:四器 之 迭代器](http://blog.csdn.net/managementandjava/article/details/51404884) *  * 通过以下两个例子来展现iterator的用法; *      首先理解下为什么存在迭代器; *      迭代器就是集合取出元素的方式; *      因为每个容器都有 存和取的功能,由于每个容器的数据存储结构不同,其存和取的方式也就不同;而对于取出元素,其不止一个动作来完成(先判断 再取等多个动作) *      那么这多个动作就应该封装成一个对象;这样每个容器中就都有一个取出数据的对象;因为不同容器的数据结构不同,因此每个容器中取出对象的实现方式也不一样; *      那么就应该在每个容器内部 定义一个取出元素的内部类(因为数据就存在这个容器中,直接用内部类来操作这些数据时最方方便的,因此用内部类),但是这些取出 *      的内部类有自己的共性东西 都有 判断和取出。因此就可以向上抽取成一个接口(Iterator) *  *      对内部类的理解和迭代器设计模式的理解: *          内部类: 容器是一个事物,而容器内部存储的东西也是一个事物,那么就可以定一个内部类在容器内操容器内的事物; *          迭代器设计模式:多个类都有自己操作其内部数据的方式,而这些方式又有相同的共性,那么就可以把这个共性抽取成一个接口,在各个类中提供一个方法 *                     来返回这个接口,通过这个接口(进而通过内部类)来操作这多个类中的数据; *  *  迭代器设计模式: *      又称游标设计模式:GOF给出的定义:提供一种方法访问一个容器对象中的各个元素,而又不暴露该对象的内部细节 *  组成元素: *  1.抽象迭代器:定义遍历元素所需要的方法,一般来说会有这么三个方法:next(),hasNext()和remove(), *  2.迭代器实现:实现迭代器接口中定义的方法,完成集合的迭代。 *  3.抽象容器:一般是一个接口,提供一个iterator()方法,例如java中的Collection接口,List接口,Set接口等。 *  4.具体容器:就是抽象容器的具体实现类,比如List接口的有序列表实现ArrayList. *  * 使用场景: *  迭代器模式是与集合共生共死的,一般来说,我们只要实现一个集合,就需要同时提供这个集合的迭代器,就像java中的 *  Collection,List、Set、Map等,这些集合都 *  有自己的迭代器。假如我们要实现一个这样的新的容器,当然也需要引 *  入迭代器模式,给我们的容器实现一个迭代器。 * *///实例1://1.抽象迭代器interface MyIterator{    public Object next();    public boolean hasNext();}//2.迭代器实现class MyListIterator implements MyIterator{    private List<?> list = null;    public MyListIterator(List<?> list){        this.list = list;    }    private int count = 0;    public Object next(){        Object obj=null;        if(this.hasNext()){            obj =  list.get(count++);        }        return obj;     }    public boolean hasNext(){        if(count==list.size())            return false;        else            return true;    }}//抽象容器interface MyCollection{    public void addAll(Object[] objs);    public MyIterator iterator();}//具体容器class MyListCollection implements MyCollection{    private List<Object> list= new ArrayList<Object>();    public void addAll(Object[] objs) {        for(Object obj:objs)            list.add(obj);    }    @Override    public MyIterator iterator() {        return new MyListIterator(list);    }}public class IteratorModel {    public static void main(String[] args) {        String[] infos = "hello java : wo should say hello to the world !!".split(" ");        MyListCollection mc = new MyListCollection();        mc.addAll(infos);        for(MyIterator mi = mc.iterator();mi.hasNext();){            System.out.print(mi.next()+" ");        }    }}

输出结果:
hello java : wo should say hello to the world !!

0 0
原创粉丝点击