设计模式之迭代器模式
Iterator(迭代器)
一、迭代器模式简介
迭代器模式(Iterator Pattern)是 Java 和 .Net 编程环境中非常常用的设计模式。这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。
迭代器模式属于行为型模式
核心:
- 1、提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示
- 2、不同的方式来遍历整个整合对象
- 3、定义接口:hasNext, next。
二、迭代器模式优缺点比较
优点:
- 1、支持以不同的方式遍历一个聚合对象
- 2、迭代器简化了聚合类
- 3、扩展灵活
缺点:
- 1、由于迭代器模式将存储数据和遍历数据的职责分离,增加新的聚合类需要对应增加新的迭代器类,类的个数成对增加,这在一定程度上增加了系统的复杂性
使用场景:
- 1、JDK内置的遍历(list/set)
注意事项:迭代器模式就是分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不暴露集合的内部结构,又可让外部代码透明地访问集合内部的数据
三、UML类图
四、设计实现
步骤1:创建迭代器接口
//迭代器---遍历数据 public interface Iterator { public boolean hasNext(); public Object next(); }
步骤2:创建容器接口
//容器 public interface Container { public Iterator getIterator(); }
步骤3:创建实现容器接口的具体类
//聚合对象---存储数据 public class MyContainer implements Container { private List<Object> lists = new ArrayList<>(); public List<Object> getLists() { return lists; } public void setLists(List<Object> lists) { this.lists = lists; } public Iterator getIterator() { return new MyIterator(); } public void addObject(Object obj) { lists.add(obj); } public Object removeObject(Object obj) { return lists.remove(obj); } //静态内部类---迭代器实现类 private class MyIterator implements Iterator{ int cursor; @Override public boolean hasNext() { if(cursor<lists.size()) { return true; } return false; } @Override public Object next() { if(cursor<lists.size()) { return lists.get(cursor++); } return null; } } }
步骤4:调用者测试
public class IteratorDemo { public static void main(String[] args) { MyContainer c = new MyContainer(); c.addObject("aaa"); c.addObject("bbb"); c.addObject("ccc"); c.addObject("tttttttt"); System.out.println(c.getLists().toString()); Iterator it = c.getIterator(); while(it.hasNext()) { System.out.println(it.next()); } } }
步骤5:运行程序,观察结果
posted on 2020-04-07 22:13 VincentYew 阅读(180) 评论(0) 收藏 举报