现在的位置: 首页 > 综合 > 正文

设计模式-结构型模式-迭代器

2017年12月08日 ⁄ 综合 ⁄ 共 2365字 ⁄ 字号 评论关闭

行为模式涉及到算法和对象间职责的分配。
iterator:提供一个方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示。

 

package behaviour.iterator;
/**
 *  The interface to create concrete iterator
 *  When create iterator, we can use Factory Method pattern
 */
public interface Aggregate  {
    public Iterator CreateIterator();
}

 

package behaviour.iterator;
/**
 *  Data stored in a vector
 */
import java.io.*;
import java.util.*;

public class DataVector implements Aggregate {
    private Vector data = new Vector();
   
    public DataVector(String fileName) {
        try {
            BufferedReader f = new BufferedReader(new FileReader(fileName));
            String s = f.readLine();
            while(s != null) {
                if(s.trim().length() > 0) {
                    data.add(s);
                }
                s = f.readLine();
            }
            f.close();
        } catch (FileNotFoundException e) {
            System.out.println("Can not find such file !");
        } catch (IOException e) {
            System.out.println("I/O Error !");
            System.exit(0);
        }
    }
   
    public Iterator CreateIterator() {
        return new VectorIterator(data);
    }
   
}

 

package behaviour.iterator;
/**
 *  Iterator Interface
 */
public interface Iterator {
    public abstract void First();
    public abstract void Next();
    public abstract boolean IsDone();
    public abstract void CurrentItem();
}

 

package behaviour.iterator;
/**
 *
 */
import java.io.*;
import java.util.*;

public class Test  {
    public static void main(String[] args) {
        String fileName = "d://JavaProject//Iterator//src//data.txt";
        DataVector dataVector = new DataVector(fileName);
        Iterator iVector = dataVector.CreateIterator();
        for(iVector.First(); ! iVector.IsDone(); iVector.Next()) {
            iVector.CurrentItem();
        }
    }
}

 

package behaviour.iterator;
/**
 *  A vector iterator to print data reverse
 */
import java.io.*;
import java.util.*;

public class VectorIterator implements Iterator {
    private Vector data = new Vector();
    private int cursor = 0;

    public VectorIterator(Vector _data) {
        data = _data;
    }   
    public void First() {
        //cursor = 0;
        cursor = (data.size() - 1);
    }
    public void Next() {
        //cursor++;
        cursor--;
    }
    public boolean IsDone() {
        //return (cursor >= data.size());
        return (cursor < 0);
    }
    public void CurrentItem() {
        if(IsDone()) {
            System.out.println("Reach the end of the vector");
        } else {
            System.out.println("Number " + cursor + ": " + data.get(cursor));
        }
    }
}

 

data.txt

 

kkkkkk
shit
abc
luck
name
type
oh
good
java
kava
sun
oracle
sap

抱歉!评论已关闭.