Android Ap开发设计模式第一篇:迭代器模式
Iterator Pattern迭代器模式
场景猜想
经常编写代码都会碰到遍历一个数组,使用for循环得到数组下标之后去做进一步操作。例如下文代码:
int[] array=new int[5];
for(int i=0;i<array.length;i++){
System.out.println(""+i);
}
或:
int[] array=new int[5];
for(int i:array){
System.out.println(""+i);
}
当然,还有更多的作法,利用将 i 将下标推移的方式遍历数组元素。
使用设计模式来编写的时候,可以将 i 的行为,抽象化为迭代器,这种模式我们称之为迭代器模式 。迭代器模式可以用来作为遍历一个集合体。java 亦提供了一个工具类: java.util.Iterator<E> ,与其类似。
场景需求
书架上有5本技术书籍,要求将书籍名称一性遍历出来,将显示在Andriod 的 EditText 上面。以上面的需求为例,可以将具体需求具体到下面的示意图:
Aggregate接口
Aggregate 接口是一个执行递增的“聚合”。实现此接口的类就变成类似数组、集合的“聚合”。表示己聚合的接口。
Iterator接口
Iterator 接口执行元素递增,具有类似循环变量的功能。表示执行递增、遍历的接口。
Book 类
Book 表示书籍,主要是为了获取书的详细。
BookShelf类
BookShelf 表示书架,此类实现Aggregate接口从而将其作为聚合处理。
BookShelfIterator类
BookShelfIterator表示扫描书架的类,实现了Iterator 的接口功能。
-----------------------------------------
IteratorPatternsActivity 类
IteratorPatternsActivity 为Android 的主界面,用来显示和测试上面编写的代码
-----------------------------------------
代码实现:
Aggregate接口
/**
* 声明一个Iterator方法,这是为了建立一个可对应聚合的Iterator
* 如欲递增、遍历或逐一检查某一个聚合时,利用iterator方法即可建立一个
* 实现Iterator 接口 的类对象实例。
* @author terry
*
*/
public interface Aggregate {
public abstract Iterator iterator();
}
Iterator 接口
public interface Iterator {
public abstract boolean hasNext(); //存在一条则返回true
public abstract Object next(); //移到下一条记录
}
next 方法是返回聚合当中的1个元素。不过,next 方法的功能并非仅仅如此。事实上它还会悄悄地先要在内部状态进入下一步,以便下次调用 next 方法时能确实返回下一个元素。而Iterator 只描述了有两个方法,具体这两个方法如何实现还要看 BookShelfIterator 内部的实现。
Book 类
/**
* 表示 书籍的类
* @author terry
*
*/
public class Book {
private String name="";
public Book(String name){
this.name=name;
}
public String getName(){
return this.name;
}
}
BookShelf 类
/**
* 表示书架意图的类
* 要实现Aggreagate接口 才能把这个类当作聚合来处理。
* @author terry
*
*/
public class BookShelf implements Aggregate{
private Book[] books;
private int last=0;
public BookShelf(int maxSize){
this.books=new Book[maxSize];
}
public Book getBookAt(int index){
return books[index];
}
public BookShelf appendBook(Book boo
相关新闻>>
- 发表评论
-
- 最新评论 更多>>