迭代器模式
一、完成者信息:
姓名: 王延
学号: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;
}
}
设计体会:节省了很多不必要的步骤,是过程简明了很多。减少了出错的可能性,是程序的耦合程度大大减少。
验证结论:
- 用户使用地带起访问集合中的对象,而不需要知道这些对象在集合重视如何表示以及储存的。
- 用户可以同时使用多个迭代器遍历一个集合。
- 减少了工作量,增加了程序的稳定性以及减小了程序的出错可能。
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;
}
}
抽象图: