zoukankan      html  css  js  c++  java
  • 第二节:迭代器模式——迭代器模式应用

    一、应用实例

      1、应用实例要求

        编写程序展示一个学校院系结构:需求是这样,要在一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个院系。

      2、设计思路分析

      

    二、代码实现

      院系类:Element 即容器中存放的,需要来遍历的单位

     1 /**
     2  * 院系
     3  */
     4 public class Department {
     5 
     6     private String name;
     7     private String desc;
     8 
     9     public Department(String name, String desc) {
    10         this.name = name;
    11         this.desc = desc;
    12     }
    13 
    14     public String getName() {
    15         return name;
    16     }
    17 
    18     public void setName(String name) {
    19         this.name = name;
    20     }
    21 
    22     public String getDesc() {
    23         return desc;
    24     }
    25 
    26     public void setDesc(String desc) {
    27         this.desc = desc;
    28     }
    29 }

      用来遍历计算机学院的 迭代器:

     1 /**
     2  * ComputerCollegeIterator 以数组方式存放
     3  */
     4 public class ComputerCollegeIterator implements Iterator {
     5 
     6     /**
     7      *  这里我们需要知道 Department 是以怎样的方式存放
     8      */
     9     Department[] departments;
    10     int position = 0;  //遍历的位置
    11 
    12 
    13     public ComputerCollegeIterator(Department[] departments) {
    14         this.departments = departments;
    15     }
    16 
    17     /**
    18      * 判断是否还有下一个元素
    19      * @return
    20      */
    21     @Override
    22     public boolean hasNext() {
    23         if (position >= departments.length || departments[position] == null) {
    24             return false;
    25         } else {
    26             return true;
    27         }
    28     }
    29 
    30 
    31     @Override
    32     public Object next() {
    33         Department department = departments[position++];
    34         return department;
    35     }
    36 
    37     /**
    38      * 删除的方法默认空实现
    39      */
    40     @Override
    41     public void remove() {
    42 
    43     }
    44 }

      用来遍历信息工程学院的 迭代器:

     1 public class InfoCollegeIterator implements Iterator {
     2 
     3     /**
     4      * 信息工程学院是以 List 方式存放系
     5      */
     6     List<Department> departmentList;
     7     int index = -1; //索引
     8 
     9     public InfoCollegeIterator(List<Department> departmentList) {
    10         this.departmentList = departmentList;
    11     }
    12 
    13     /**
    14      * 判断 list中还有没有下一个元素
    15      * @return
    16      */
    17     @Override
    18     public boolean hasNext() {
    19         if (index >= departmentList.size() - 1) {
    20             return false;
    21         } else {
    22             index += 1;
    23             return true;
    24         }
    25     }
    26 
    27     @Override
    28     public Object next() {
    29         return departmentList.get(index);
    30     }
    31 
    32     @Override
    33     public void remove() {
    34 
    35     }
    36 }

      学院的接口:

     1 /**
     2  * 学院的接口
     3  */
     4 public interface College {
     5 
     6     public String getName();
     7 
     8     /**
     9      * 增加院系的方法
    10      * @param name
    11      * @param desc
    12      */
    13     public void addDepartment(String name, String desc);
    14 
    15     /**
    16      * 返回一个迭代器,遍历
    17      * @return
    18      */
    19     public Iterator createIterator();
    20 }

      计算机学院:

     1 public class ComputerCollege implements College{
     2 
     3     Department[] departments;
     4     int numOfDepartment = 0; //保存当前数组的对象个数
     5 
     6     public ComputerCollege() {
     7         departments = new Department[5];
     8         addDepartment("Java", "Java专业");
     9         addDepartment("C语言", "C专业");
    10         addDepartment("大数据", "大数据专业");
    11     }
    12 
    13     @Override
    14     public String getName() {
    15         return "计算机学院";
    16     }
    17 
    18     @Override
    19     public void addDepartment(String name, String desc) {
    20         Department department = new Department(name, desc);
    21         departments[numOfDepartment++] = department;
    22     }
    23 
    24     @Override
    25     public Iterator createIterator() {
    26         return new ComputerCollegeIterator(departments);
    27     }
    28 }

      信息工程学院:

     1 public class InfoCollege implements College{
     2 
     3     List<Department> departmentsList;
     4 
     5     public InfoCollege() {
     6         departmentsList = new ArrayList<Department>();
     7         addDepartment("信息安全", "信息安全专业");
     8         addDepartment("网络安全", "网络安全专业");
     9         addDepartment("服务器安全", "服务器安全专业");
    10     }
    11 
    12     @Override
    13     public String getName() {
    14         return "信息工程学院";
    15     }
    16 
    17     @Override
    18     public void addDepartment(String name, String desc) {
    19         Department department = new Department(name, desc);
    20         departmentsList.add(department);
    21     }
    22 
    23     @Override
    24     public Iterator createIterator() {
    25         return new InfoCollegeIterator(departmentsList);
    26     }
    27 }

      封装一个用于输出的学校信息的类:

     1 public class OutputImpl {
     2 
     3     /**
     4      * 学院集合
     5      */
     6     List<College> collegeList;
     7 
     8     public OutputImpl(List<College> collegeList) {
     9         this.collegeList = collegeList;
    10     }
    11 
    12     /**
    13      * 遍历所有学院,然后调用 printDepartment 输出各个学院的系
    14      */
    15     public void printCollege() {
    16         // 从 collegeList 取出所有学院,Java 中的 List 已经实现了Iterator接口
    17         Iterator<College> iterator = collegeList.iterator();
    18 
    19         while (iterator.hasNext()) {
    20             //取出一个学院
    21             College college = iterator.next();
    22             System.out.println("========"+ college.getName() +"==========");
    23             printDepartment(college.createIterator());
    24         }
    25 
    26     }
    27 
    28     /**
    29      * 输出学院下面的院系
    30      */
    31     public void printDepartment(Iterator iterator) {
    32         while (iterator.hasNext()) {
    33             Department dept = (Department)iterator.next();
    34             System.out.println(dept.getDesc());
    35         }
    36     }
    37 }

      客户端:

     1 public class Client {
     2     public static void main(String[] args) {
     3 
     4         //创建学院
     5         List<College> colleges = new ArrayList<>();
     6         colleges.add(new ComputerCollege());
     7         colleges.add(new InfoCollege());
     8 
     9         OutputImpl output = new OutputImpl(colleges);
    10         output.printCollege();
    11     }
    12 }

     

  • 相关阅读:
    浅谈系统调用与库函数
    由代码到可执行程序----浅谈程序的编译链接
    初识信号---进程间的交流
    内部排序总结之----选择类排序(选择、堆)
    僵死进程
    父子进程那些事儿
    fok函数
    面试-css样式
    面试-javascript知识
    面试--数据库
  • 原文地址:https://www.cnblogs.com/niujifei/p/14398791.html
Copyright © 2011-2022 走看看