设计模式之Iterator——点名篇

设计模式之 Iterator —— 点名篇

上了这么多年学,我发现一个问题,好象老师都很喜欢点名,甚至点名都成了某些老师的嗜好,一日不点名,就饭吃不香,觉睡不好似的,我就觉得很奇怪,你的课要是讲的好,同学又怎么会不来听课呢,殊不知:“误人子弟,乃是犯罪!”啊。

好了,那么我们现在来看老师这个点名过程是如何实现吧:

1、老规矩,我们先定义老师(Teacher)接口类:

public interface Teacher {

public Iterator createIterator(); //点名

}

2、具体的老师(ConcreteTeacher)类是对老师(Teacher)接口的实现:

public class ConcreteTeacher implements Teacher{

private Object[] present = {"张三来了","李四来了","王五没来"}; //同学出勤集合

public Iterator createIterator(){

return new ConcreteIterator(this); //新的点名

}

public Object getElement(int index){ //得到当前同学的出勤情况

if(index

 1<present.length){ (index="" 3、定义点名(iterator)接口类:="" 4、具体的点名(concreteiterator)类是对点名(iterator)接口的实现:="" boolean="" class="" concreteiterator="" concreteiterator(concreteteacher="" concreteteacher="" currentitem();="" else{="" first();="" first(){="" getsize(){="" if(index<size){="" implements="" index="0;" index++;="" int="" interface="" isdone();="" isdone(){="" iterator="" iterator{="" next();="" next(){="" null;="" object="" present.length;="" present[index];="" private="" public="" return="" size="teacher.getSize();" teacher){="" teacher;="" this.teacher="teacher;" void="" {="" }="" 下一个="" 当前同学的出勤情况="" 得到同学出勤集合的大小,也就是说要知道班上有多少人="" 得到同学的数目="" 是否点名完毕="" 第一个="">=size); 
 2
 3} 
 4
 5public Object currentItem(){ //当前同学的出勤情况 
 6
 7return teacher.getElement(index); 
 8
 9} 
10
11} 
12
135、编写测试类: 
14
15public class Test { 
16
17private Iterator it; 
18
19private Teacher teacher = new ConcreteTeacher(); 
20
21public void operation(){ 
22
23it = teacher.createIterator();  //老师开始点名 
24
25while(!it.isDone()){ //如果没点完 
26
27System.out.println(it.currentItem().toString()); //获得被点到同学的情况 
28
29it.next();  //点下一个 
30
31} 
32
33} 
34
35public static void main(String agrs[]){ 
36
37Test test = new Test(); 
38
39test.operation(); 
40
41} 
42
43} 
44
456、说明: 
46
47A:  定义:  Iterator  模式可以顺序的访问一个聚集中的元素而不必暴露聚集的内部情况。 
48
49B  :在本例中,  老师(  Teacher)给出了创建点名(Iterator)对象的接口,点名(Iterator)定义了遍历同学出勤情况所需的接口。 
50
51C:  Iterator  模式的优点是当  (  ConcreteTeacher)对象中有变化是,比如说同学出勤集合中有加入了新的同学,或减少同学时,这种改动对客户端是没有影响的。 
52
53转自: http://blog.csdn.net/lxgljj/archive/2004/10/22/146827.aspx</present.length){>
Published At
Categories with Web编程
Tagged with
comments powered by Disqus