栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

你可曾拥有过存钱罐(迭代器模式)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

你可曾拥有过存钱罐(迭代器模式)

你可曾拥有过存钱罐

很多人都有过存钱罐,只进不出的那种,如果想要拿出来需要砸碎,话说这天小明遇到了一个他心爱的姑娘,想着用他存钱罐的钱买一个礼物送给她。

很多人说了,小明没钱吗?非要砸存钱罐。不是的,买个礼物的钱他还是有的,只是他觉得存钱罐里的钱是好多年攒起来的,买一个礼物比较有意义。

后来… 嗯嗯 … 反正小明现在单身。

我们今天不讲爱情,讲技术。

以存钱罐为例,我们讲一下迭代器模式

一、它什么样

它是一种设计模式,它提供一种方法顺序访问一个聚合对象中各个元素,而不暴露该对象的内部表示。

我个人理解,就是把遍历的功能抽象出来,用组合来让集合类职责单一。

跟存钱罐一样,钱罐只管存钱,如果想花钱,那么你得好好思考思考了,需要砸碎它。

二、它长什么样

这里我们有一个盒子的接口、一个存钱罐实现盒子接口。

有一个迭代器接口、存钱罐迭代器实现迭代器接口。

三、它怎么实现

Box

package iterator;


public interface Box {
    MyIterator iterator();
    void add(T T);
    Integer getTotal();
}

MyIterator

package iterator;


public interface MyIterator {
    // 是否存在下一个
    boolean hasNext();
    // 获取下一个
    T next();
}

MoneyBox

package iterator;


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


public class MoneyBox implements Box{
    // 存钱罐里边的钱 这可是钱呀 为什么用Integer 我乐意 你管得着吗 气死你
    List moneys = new ArrayList<>();

    // 存钱
    @Override
    public void add(Integer money) {
        if (money == null) {
            new Exception("你存了个寂寞吗?");
        }
        moneys.add(money);
    }

    
    @Override
    public Integer getTotal(){
        return moneys.size();
    }
    
    @Override
    public MyIterator iterator() {
        return new MoneyBoxIterator(this);
    }

}

MoneyBoxIterator

package iterator;


public class MoneyBoxIterator implements MyIterator{
    MoneyBox moneyBox;
    int index;
    public MoneyBoxIterator(MoneyBox moneyBox){
        System.out.println("存钱罐开个口......");
        this.moneyBox = moneyBox;
        this.index = 0;
    }

    
    @Override
    public boolean hasNext() {
        // 直接比较当前遍历下边 与总数即可
        return index < moneyBox.getTotal();
    }

    
    @Override
    public Integer next() {
        return moneyBox.moneys.get(index++);
    }
}

Test

package iterator;



public class Test {
    public static void main(String[] args) {
        // 老公存钱
        Box box = new MoneyBox();
        box.add(100);
        box.add(50);
        box.add(20);
        box.add(10);
        box.add(100);
        box.add(5);
        // 老婆取钱
        MoneyBoxIterator iterator = (MoneyBoxIterator)box.iterator();
        while (iterator.hasNext()) {
            Integer next = iterator.next();
            System.out.println(next);
        }


    }
}

四、它怎么样

它跟我们的油盐酱醋茶一样,生活中处处可见。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/713522.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号