这两天在看《设计模式--JAVA语言中的应用》这本书,写作风格是我所喜欢的,先说明原理,再图示解说,再根据示例说明具体的用法。使人很好地理解,而且章节的安排上,也将23种设计模式根据应用进行了分类和归纳。看书的同时顺便也总结一下,也全当复习。
第一类:访问方式
代表迭代器模式(Iterator Pattern)
迭代器模式是描述了对一组同类的对象的访问方式,所起到作用其实就是类似于for或while循环,依次遍历并处理一个“聚合”中的元素。
public interface Aggregate{
public abstract Iterator iterator();
}
public interface Iterator{
public abstract boolean hasNext();
public abstract Object next();
}
通过Aggregate类利用iterator方法建立一个实现Iterator接口的类的对象实例(instance)。Iterator接口执行元素递增,类似循环变量的功能。
当然该模式的实现还有声明一个被迭代元素的类Content,实现Iterator接口的ConcreteIterator类,以及一个实现Aggregate接口的表示元素的聚合类Contents。
在Contents类中有保存多个content对象的数据域,可用例如数组(Content[])保存。同时在Contents类中也要实现Aggregate接口中的iterator方法,返回一个ConcreteIterator的实例,注意这里ConcreteIterator的实例是针对Contents对象而构造的,所以该iterator方法可以实现为:
public class Contents implements Aggregate{
private Content[] contents;
private int last = 0;
public Contents (int maxSize){
this.contents = new Content[maxSize];
}
public void add(Content content){
this.contents[last] = content;
last++;
}
public ConcreteIterator iterator(){
return new ConcreteIterator(this);
}
public int getSize(){
return last;
}
public Contents getByIndex(int index){
return this.contents[index];
}
}
ConcreteIterator类只要实现一个构造方法,以及Iterator接口中具体的hasNext和next方法即可。
public class ConcreteIterator implements Iterator{
private int index ;
private Contents contents;
public ConcreteIterator(Contents contents){
this.contents = contents;
this.index = 0;
}
public boolean hasNext(){
if(index < contents.getSize())
return true;
else
return fasle;
}
public Content next(){
index++;
return contents.getByInex(index-1);
}
}