设计模式--iterator模式简要探究

来源:互联网 发布:为什么淘宝网无法登录 编辑:程序博客网 时间:2024/06/05 18:44

对于iterator模式,可能很多同胞都有用过,也有大神做过讲解和深化,所以这次LZ就不哗众取宠,只说一些自己学习或者用到iterator时所产生的感想和总结,希望和大家交流一下。

LZ在示例中代码就不写全了,只表明这个模式原理即可,望见谅!

有两种方式定义iterator模式,大致相同:

第一种:通过构造函数进行传递,调用专有方法

第二种:通过定以内部类实现专有方法的调用

 

----------------------------------------------------------------------------------------------------

    定义一个Iterable接口,用于实现类来进行迭代器的获取。

public interface Iterable {

    Iterator iterator();
}

 

------------------------------------------------------------------------------------------------------

    定义一个Iterator 接口,用于各种实现类来进行统一的方法(重点)

public interface Iterator {

    boolean hashNext();
    
    Object next();
    
    int remove(int remove);
}

 

------------------------------------------------------------------------------------------------------

    定义一个用于实现迭代器的类。

public class ListTest implements Iterable{
    
    private Object object;

    @Override
    public Iterator iterator() {
        //传递本类对象
        return new ListIterator(this);
    }
 

//这个方法也是一个核心--当调用迭代器时是ListTest的属性去直接调用,并且直接返回了一个iterator,所以当中的数值需要通过这个set方法进行传递,之后在遍历等操作中才可以用到
    //当创建ListTest时并且赋值时,将数据存储,直接在此类中即可遍历
    public void set(Object object){
        this.object = object;
    }
    
    //ListTest自身的遍历方式
    public Object get(){
        
        //如果这是一个自定义的list的话,那么这里放的就是list的遍历方式
        return object;
    }
    
    //删除
    public int remove(){
        return 0;
    }
    
    
    //ListTest的长度,用来判断是否还有下一个
    public int size(){
        return 0;
    }
    
}

 

------------------------------------------------------------------------------------------------------

 

//第一种方法是在这个ListIterator 类中定义一个构造函数,用于将ListTest对象传递进来,然后调用其中的方法。

//第二种方法直接将ListIterator 类变为ListTest的内部类,直接使用外部类中的各种方法,需要注意的是这个内部类不能用static修饰(这样做的话就将内部类变为了静态类,无法使用外部类的方法)


class ListIterator implements Iterator{
    private ListTest list;
    
    public ListIterator(ListTest list){
        this.list = list;
    }
    
    @Override
    public boolean hashNext() {
        //在这里进行判断
        list.size();
        return true;
    }

    @Override
    public Object next() {
        //通过这个方法可以实现不同的值获取方式,比如list set map等
        return list.get();
    }

    @Override
    public int remove(int remove) {
        return list.remove();
    }
}

    对于iterator模式来说,可能真正自己定义这种模式的机会并不多,但是了解其中的原理和设计的思想对于我们却有着很大的帮助!

原创粉丝点击