【设计模式】迭代器模式

####### 对客户端隐藏了遍历细节,遍历方式的改变对客户端来说是透明的,避免了遍历方式改变对客户端的影响,以满足单一职责原则。

UML类图

在这里插入图片描述

代码实例
package com.depthmind.designpattern;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class IteratorPattern {
    public static void main(String[] args) {
        College computerCollege = new ComputerCollege();
        College informationCollege = new InformationCollege();
        Iterator computerCollegeIterator = computerCollege.createIterator();
        Iterator informationCollegeIterator = informationCollege.createIterator();
        System.out.println(computerCollege.getName());
        while (computerCollegeIterator.hasNext()) {
            System.out.println(((Department) computerCollegeIterator.next()).getName());
        }
        System.out.println("-----------------");
        System.out.println(informationCollege.getName());
        while (informationCollegeIterator.hasNext()) {
            System.out.println(((Department) informationCollegeIterator.next()).getName());
        }
    }
}

class ComputerCollegeIterator implements Iterator {

    private List<Department> departmentList;
    private volatile int index = -1;

    public ComputerCollegeIterator(List<Department> departmentList) {
        this.departmentList = departmentList;
    }

    @Override
    public boolean hasNext() {
        if (index >= departmentList.size() - 1) {
            return false;
        }
        return true;
    }

    @Override
    public Object next() {
        index ++;
        return departmentList.get(index);
    }
}

class InformationCollegeIterator implements Iterator{
    private Department[] departments;
    private volatile int index = -1;

    public InformationCollegeIterator(Department[] departments) {
        this.departments = departments;
    }

    @Override
    public boolean hasNext() {
        if (index + 1 >= departments.length || departments[index + 1] ==null) {
            return false;
        }
        return true;
    }

    @Override
    public Object next() {
        index ++;
        return departments[index];
    }
}

interface College {
    String getName();
    void addDepartment(Department department);
    Iterator createIterator();
}

class ComputerCollege implements College {

    private List<Department> departments;

    public ComputerCollege() {
        this.departments = new ArrayList<>(5);
        addDepartment(new Department("Java", "Java"));
        addDepartment(new Department("PHP", "PHP"));
        addDepartment(new Department("Python", "Python"));
    }

    @Override
    public String getName() {
        return "计算机学院";
    }

    @Override
    public void addDepartment(Department department) {
        departments.add(department);
    }

    @Override
    public Iterator createIterator() {
        return new ComputerCollegeIterator(departments);
    }
}

class InformationCollege implements College {

    private Department[] departments;
    private volatile int index = 0;

    public InformationCollege() {
        departments = new Department[5];
        addDepartment(new Department("信息安全","信息安全"));
        addDepartment(new Department("网络安全","网络安全"));
        addDepartment(new Department("服务器安全","服务器安全"));
    }

    @Override
    public String getName() {
        return "信息学院";
    }

    @Override
    public void addDepartment(Department department) {
        departments[index] = department;
        index++;
    }

    @Override
    public Iterator createIterator() {
        return new InformationCollegeIterator(departments);
    }
}

class Department {
    private String name;
    private String description;

    public Department(String name, String description) {
        this.name = name;
        this.description = description;
    }

    public String getName() {
        return name;
    }

    public String getDescription() {
        return description;
    }
}
JDK中的ArrayList对迭代器模式的应用

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值