【设计模式学习笔记】迭代器模式

迭代器模式,这是一个很好玩的模式。其实迭代器已经存于集合中了。但是呢,我们可以动手写一个迭代器,并且将其运用在迭代器模式中,而不是在list中。

文章目录

    • 1.1 定义一个迭代器接口及实现
    • 1.2 我们统计生产的车是这样的
    • 1.3 开始记录了
    • 1.4 结果
    • 参考

我们的车间每天都在生产车,但是生产多少车,生产的车叫什么名字,每天是不是要进行报表统计?当然了我们有现成的Iterator接口。但是,请你忘记他。我们自己写个这样的接口,想想啊,我们自己的接口想干啥就能干啥。

1.1 定义一个迭代器接口及实现

package iterator;

/************************************************
 *@ClassName : iterator
 *@Description : TODO
 *@Author : NikolaZhang
 *@Date : 【2018/12/10 0010 21:04】
 *@Version : 1.0.0
 *************************************************/

public interface Iterator {
    boolean hasNext();
    Object next();
}

简便起见我们的接口就只有两个抽象方法。这已经足够了。实现如下:

package iterator;


import java.util.List;

/************************************************
 *@ClassName : CarIterator
 *@Description : TODO
 *@Author : NikolaZhang
 *@Date : 【2018/12/10 0010 21:05】
 *@Version : 1.0.0
 *************************************************/

public class CarIterator implements Iterator {
    private List<Car> list;
    private int cnt = 0;
    @Override
    public boolean hasNext() {
        return cnt<list.size()?true:false;
    }

    @Override
    public Car next() {
        return list.get(cnt++);;
    }

    public CarIterator(List<Car> list) {
        if(list == null){
            System.out.println("集合未实例化");
            return;
        }
        this.list = list;
    }
}

实现的方法也是见人见智。

1.2 我们统计生产的车是这样的

package iterator;

/************************************************
 *@ClassName : Car
 *@Description : TODO
 *@Author : NikolaZhang
 *@Date : 【2018/12/10 0010 21:08】
 *@Version : 1.0.0
 *************************************************/

public interface Car {
    void addCar(String carName, String price);
    Iterator getIterator();
}

统计车的时候,我们需要记录车的名字和价格。每生产出来一辆车我们就调用addCar记录。

package iterator;

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

/************************************************
 *@ClassName : CarImpl
 *@Description : TODO
 *@Author : NikolaZhang
 *@Date : 【2018/12/10 0010 21:13】
 *@Version : 1.0.0
 *************************************************/

public class CarImpl implements Car{
    private List<Car> list = new ArrayList<>();
    private String carName;
    private String price;

    @Override
    public void addCar(String carName, String price) {
        list.add(new CarImpl(carName, price));
    }

    @Override
    public Iterator getIterator() {
        return new CarIterator(list) ;
    }

    private CarImpl(String carName, String price) {
        this.carName = carName;
        this.price = price;
    }

    public CarImpl() {
    }

    public String getCarName() {
        return carName;
    }

    public String getPrice() {
        return price;
    }
}

1.3 开始记录了

package iterator;

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

/************************************************
 *@ClassName : Test
 *@Description : TODO
 *@Author : NikolaZhang
 *@Date : 【2018/12/10 0010 21:21】
 *@Version : 1.0.0
 *************************************************/

public class Test {
    public static void main(String[] args) {
        Car car = new CarImpl();
        car.addCar("宝马", "1000000");
        car.addCar("奔驰", "2000000");

        // 给老板汇报
        Iterator iterator = car.getIterator();
        while(iterator.hasNext()){
            CarImpl car1 = (CarImpl) iterator.next();
            System.out.println(car1.getCarName()+"价格:"+car1.getPrice());
        }

    }
}

1.4 结果

【设计模式学习笔记】迭代器模式_第1张图片

参考

【菜鸟教程】:http://www.runoob.com/design-pattern/iterator-pattern.html

你可能感兴趣的:(设计模式)