行为模式涉及到算法和对象间职责的分配。
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