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

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

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

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

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

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

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

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

一、它什么样

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

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

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

二、它长什么样

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

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

三、它怎么实现

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);
        }


    }
}

四、它怎么样

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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5710172.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-18
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存