设计模式14 - 迭代器模式【Iterator Pattern】

简介: 设计模式14 - 迭代器模式【Iterator Pattern】

迭代器模式

已经过时了,随便看看吧,下面的代码都是复制过来的。

定义:

提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示。

举例:

未修改前的代码:

public interface IProject { 
    //从老板这里看到的就是项目信息
    public String getProjectInfo(); 
} 
public class Project implements IProject { 
    //项目名称
    private String name = ""; 
    //项目成员数量
    private int num = 0; 
    //项目费用
    private int cost = 0; 
    //定义一个构造函数,把所有老板需要看到的信息存储起来
    public Project(String name,int num,int cost){ 
         //赋值到类的成员变量中
         this.name = name; 
         this.num = num; 
         this.cost=cost; 
     } 
    //得到项目的信息
    public String getProjectInfo() { 
         String info = ""; 
         //获得项目的名称
         info = info+ "项目名称是:" + this.name; 
         //获得项目人数
         info = info + "\t项目人数: "+ this.num; 
         //项目费用
         info = info+ "\t 项目费用:"+ this.cost; 
         return info; 
     } 
} 
public class Boss { 
     public static void main(String[] args) { 
         //定义一个List,存放所有的项目对象
         ArrayList<IProject> projectList = new ArrayList<IProject>(); 
         //增加星球大战项目
         projectList.add(new Project("星球大战项目",10,100000)); 
         //增加扭转时空项目
         projectList.add(new Project("扭转时空项目",100,10000000)); 
         //增加超人改造项目
         projectList.add(new Project("超人改造项目",10000,1000000000)); 
         //这边100个项目
         for(int i=4;i<104;i++){ 
             projectList.add(new Project("第"+i+"个项目",i*5,i*1000000)); 
         } 
         //遍历一下ArrayList,把所有的数据都取出
         for(IProject project:projectList){ 
             System.out.println(project.getProjectInfo()); 
         } 
     } 
} 

修改之后的代码:

public interface IProject { 
    //增加项目
    public void add(String name,int num,int cost); 
    //从老板这里看到的就是项目信息
    public String getProjectInfo(); 
    //获得一个可以被遍历的对象
    public IProjectIterator iterator(); 
} 
public class Project implements IProject { 
    //定义一个项目列表,说有的项目都放在这里
    private ArrayList<IProject> projectList = new ArrayList<IProject>(); 
    //项目名称
    private String name = ""; 
    //项目成员数量
    private int num = 0; 
    //项目费用
    private int cost = 0; 
    public Project(){} 
    //定义一个构造函数,把所有老板需要看到的信息存储起来
    private Project(String name,int num,int cost){ 
         //赋值到类的成员变量中
         this.name = name; 
         this.num = num; 
         this.cost=cost; 
    } 
    //增加项目
    public void add(String name,int num,int cost){ 
         this.projectList.add(new Project(name,num,cost)); 
    } 
    //得到项目的信息
    public String getProjectInfo() { 
         String info = ""; 
         //获得项目的名称
         info = info+ "项目名称是:" + this.name; 
         //获得项目人数
         info = info + "\t项目人数: "+ this.num; 
         //项目费用
         info = info+ "\t 项目费用:"+ this.cost; 
         return info; 
     } 
    //产生一个遍历对象
    public IProjectIterator iterator(){ 
         return new ProjectIterator(this.projectList); 
    } 
} 
public interface IProjectIterator extends Iterator { 
}
public class ProjectIterator implements IProjectIterator { 
    //所有的项目都放在这里ArrayList中
    private ArrayList<IProject> projectList = new ArrayList<IProject>(); 
    private int currentItem = 0; 
    //构造函数传入projectList
    public ProjectIterator(ArrayList<IProject> projectList){ 
         this.projectList = projectList; 
    } 
    //判断是否还有元素,必须实现
    public boolean hasNext() { 
         //定义一个返回值
         boolean b = true; 
         if(this.currentItem>=projectList.size() || 
                this.projectList.get(this.currentItem) == null){ 
             b =false; 
         } 
     return b; 
     } 
    //取得下一个值
    public IProject next() { 
         return (IProject)this.projectList.get(this.currentItem++); 
    } 
    //删除一个对象
    public void remove() { 
         //暂时没有使用到
    } 
} 
public class Boss { 
     public static void main(String[] args) { 
     //定义一个List,存放所有的项目对象
     IProject project = new Project(); 
     //增加星球大战项目
     project.add("星球大战项目ddddd",10,100000); 
     //增加扭转时空项目
     project.add("扭转时空项目",100,10000000); 
     //增加超人改造项目
     project.add("超人改造项目",10000,1000000000); 
     //这边100个项目
     for(int i=4;i<104;i++){ 
         project.add("第"+i+"个项目",i*5,i*1000000); 
     } 
     //遍历一下ArrayList,把所有的数据都取出
     IProjectIterator projectIterator = project.iterator(); 
     while(projectIterator.hasNext()){ 
         IProject p = (IProject)projectIterator.next(); 
         System.out.println(p.getProjectInfo()); 
     } 
  } 
 } 

总结:

基本上很少有项目再独立写迭代器了,直接使用 List 或者 Map 就可以完整的解决问题。

目录
相关文章
|
2月前
|
设计模式 Java 开发者
Kotlin教程笔记(54) - 改良设计模式 - 迭代器模式
本教程详细讲解Kotlin语法,适合希望深入了解Kotlin的开发者。对于快速学习Kotlin的用户,推荐查看“简洁”系列教程。本文重点介绍迭代器模式,通过具体示例展示了如何在Kotlin中实现迭代器模式,包括使用Iterator、Iterable接口及重载iterator运算符的方法。
32 4
|
2月前
|
设计模式 Java Kotlin
Kotlin学习笔记 - 改良设计模式 - 迭代器模式
Kotlin学习笔记 - 改良设计模式 - 迭代器模式
29 2
|
2月前
|
设计模式 Java 开发者
Kotlin教程笔记(54) - 改良设计模式 - 迭代器模式
本教程详细讲解了Kotlin中的迭代器模式,包括如何通过实现Iterator和Iterable接口以及重载iterator运算符来实现可遍历的自定义集合。示例展示了如何创建一个图书集类,并通过不同方式使其支持遍历操作,适合希望深入了解Kotlin迭代器模式的开发者。
29 3
|
21天前
|
设计模式 Java Kotlin
Kotlin教程笔记(54) - 改良设计模式 - 迭代器模式
Kotlin教程笔记(54) - 改良设计模式 - 迭代器模式
29 0
|
2月前
|
设计模式 Java Kotlin
Kotlin教程笔记(54) - 改良设计模式 - 迭代器模式
Kotlin教程笔记(54) - 改良设计模式 - 迭代器模式
33 1
|
2月前
|
设计模式 Java Kotlin
Kotlin教程笔记(54) - 改良设计模式 - 迭代器模式
Kotlin教程笔记(54) - 改良设计模式 - 迭代器模式
26 1
|
3月前
|
设计模式
设计模式-工厂模式 Factory Pattern(简单工厂、工厂方法、抽象工厂)
这篇文章详细解释了工厂模式,包括简单工厂、工厂方法和抽象工厂三种类型。每种模式都通过代码示例展示了其应用场景和实现方法,并比较了它们之间的差异。简单工厂模式通过一个工厂类来创建各种产品;工厂方法模式通过定义一个创建对象的接口,由子类决定实例化哪个类;抽象工厂模式提供一个创建相关或依赖对象家族的接口,而不需要明确指定具体类。
设计模式-工厂模式 Factory Pattern(简单工厂、工厂方法、抽象工厂)
|
3月前
|
设计模式 安全 Java
Java设计模式-迭代器模式(21)
Java设计模式-迭代器模式(21)
|
3月前
|
设计模式 Java
设计模式--适配器模式 Adapter Pattern
这篇文章介绍了适配器模式,包括其基本介绍、工作原理以及类适配器模式、对象适配器模式和接口适配器模式三种实现方式。
|
5月前
|
存储 NoSQL Go
iLogtail设计模式问题之迭代器模式是如何应用的
iLogtail设计模式问题之迭代器模式是如何应用的