很多人都有过存钱罐,只进不出的那种,如果想要拿出来需要砸碎,话说这天小明遇到了一个他心爱的姑娘,想着用他存钱罐的钱买一个礼物送给她。
很多人说了,小明没钱吗?非要砸存钱罐。不是的,买个礼物的钱他还是有的,只是他觉得存钱罐里的钱是好多年攒起来的,买一个礼物比较有意义。
后来… 嗯嗯 … 反正小明现在单身。
我们今天不讲爱情,讲技术。
以存钱罐为例,我们讲一下迭代器模式
一、它什么样它是一种设计模式,它提供一种方法顺序访问一个聚合对象中各个元素,而不暴露该对象的内部表示。
我个人理解,就是把遍历的功能抽象出来,用组合来让集合类职责单一。
跟存钱罐一样,钱罐只管存钱,如果想花钱,那么你得好好思考思考了,需要砸碎它。
二、它长什么样这里我们有一个盒子的接口、一个存钱罐实现盒子接口。
有一个迭代器接口、存钱罐迭代器实现迭代器接口。
三、它怎么实现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); } } }四、它怎么样
它跟我们的油盐酱醋茶一样,生活中处处可见。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)