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

迭代器模式,这是一个很好玩的模式。其实迭代器已经存于集合中了。但是呢,我们可以动手写一个迭代器,并且将其运用在迭代器模式中,而不是在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 结果

 

参考

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

 本文原文地址:https://blog.csdn.net/baidu_30325009/article/details/85018854

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值