迭代器模式

一、完成者信息:

姓名: 王延

学号:07770125

 

二、模式信息

模式名称:迭代器

生活场景:将保险柜里的钱分类,从中选出假币。

终极目标:合计最终真币的总数。

 

1.不假思索的思路:通过类和类之间参数的调用来实现最后结果。

类结构图:

代码浏览:

代码:
class Application{

int n = 20
;
int sum = 0
;
public int
getSum(){
return
sum;
}
}

class
Dummy extends Application{
public int
Getsum1(){
int sum1 = 0
;
this.n =
n;
for(int i = 0;i <= n;i++
){
if(i==n/2||i==n/5||i==n/6
){
sum1
++
;
}
}
return
sum1;
}
}



class
Real extends Application{

public int
Getsum(){
this.sum =
sum;
this.n =
n;
sum
=
n;

return
sum;
}
}





public class
Total {
public static void
main(String args[]){

Dummy dy
= new
Dummy();
int s =
dy.Getsum1();
Real rl
= new
Real();
int sum2 =
rl.Getsum();
int sum0 = (sum2 - s)*100
;
System.
out.println("共有假币"+s+"张!"
);
System.
out.println("真款共有"+sum0+""
);
}

}

存在问题:1.计算过程过于复杂。

2.类Real的实用性很差,可以直接去掉。

3.继承和调用的次数过多,容易混乱。

4.new的对象名过多,容易混搅。

2.归纳阶段

归纳步骤一、二、四

当前目标:实现假币的计算和最后的总和

思路:类结构图:

 

 

代码浏览:

 

代码:
public class Application {
public static void main(String args[]){

int n = 20;
int sum = 0;
Collection
<RenMinMony> set = new HashSet<RenMinMony>();//集合对象
for(int i = 1;i <= n;i++){
if(i==n/2||i==n/5||i==n/6)
set.add(
new RenMinMony(100,false));
else
set.add(
new RenMinMony(100,true));
}
Iterator
<RenMinMony> iterator = set.iterator();//迭代器
int jia = 1,zhen = 1;
System.out.println(
"保险箱共有"+set.size()+"张人民币");
int k = 0;
while(iterator.hasNext()){
RenMinMony money
= iterator.next();
k
++;
}
}
System.out.println(
"保险箱里有"+set.size()+"张是真币,总值是:");
iterator
= set.iterator();
while(iterator.hasNext()){
RenMinMony money
= iterator.next();
sum
= sum + money.getValue();
}
System.out.println(sum
+"");

}
}


class RenMinMony{
int value;
private boolean isTrue;
RenMinMony(
int value,boolean b){
this.value = value;
isTrue
= b;
}
public boolean getIsTrue(){
return isTrue;
}
public int getValue(){
return value;
}
}

设计体会:节省了很多不必要的步骤,是过程简明了很多。减少了出错的可能性,是程序的耦合程度大大减少。

验证结论:

  1. 用户使用地带起访问集合中的对象,而不需要知道这些对象在集合重视如何表示以及储存的。
  2. 用户可以同时使用多个迭代器遍历一个集合。
  3. 减少了工作量,增加了程序的稳定性以及减小了程序的出错可能。

3.验证阶段:

当前目标:增加一个给出第几张是假币功能;

类结构图:

 

代码浏览:

 

代码:
public class Application {
public static void main(String args[]){

int n = 20;
int sum = 0;
Collection
<RenMinMony> set = new HashSet<RenMinMony>();//集合对象
for(int i = 1;i <= n;i++){
if(i==n/2||i==n/5||i==n/6)
set.add(
new RenMinMony(100,false));
else
set.add(
new RenMinMony(100,true));
}
Iterator
<RenMinMony> iterator = set.iterator();//迭代器
int jia = 1,zhen = 1;
System.out.println(
"保险箱共有"+set.size()+"张人民币");
int k = 0;
while(iterator.hasNext()){
RenMinMony money
= iterator.next();
k
++;
if(money.getIsTrue()==false){
System.out.println(
""+k+"张是假币,被销毁");
iterator.remove();
k
++;
}
}
System.out.println(
"保险箱里有"+set.size()+"张是真币,总值是:");
iterator
= set.iterator();
while(iterator.hasNext()){
RenMinMony money
= iterator.next();
sum
= sum + money.getValue();
}
System.out.println(sum
+"");

}
}


class RenMinMony{
int value;
private boolean isTrue;
RenMinMony(
int value,boolean b){
this.value = value;
isTrue
= b;
}
public boolean getIsTrue(){
return isTrue;
}
public int getValue(){
return value;
}
}

 抽象图:

posted @ 2010-12-15 16:46  天津城建学院软件工程  阅读(314)  评论(0编辑  收藏  举报