设计模式

设计模式之禅- 迭代器模式

2020-12-28  本文已影响0人  凉快先生

1.业务背景

老大想分析一下现在还在开发或维护的103个项目,总结们每个项目的支出费用都很高,项目情况复杂,人员情况也不简单的原因。

2.定义一个接口,所有的项目都是一个接口

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;

    }

}

3.老板来看项目信息了

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());

        }

}

}

4.使用迭代器方式遍历

定义一个接口,所有的项目都是一个接口

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());

        }

    }

}

5.迭代器的通用类图

上一篇 下一篇

猜你喜欢

热点阅读