设计模式GOF23——迭代器模式
来源:互联网 发布:知乎电脑客户端 编辑:程序博客网 时间:2024/06/09 21:07
迭代器模式(iterator),又称为游标(cursor)模式,是一种行为性模型,行为型模式关注的是系统中对象之间的相互交互,解决系统在运行时对象之间的相互通信和协作,进一步明确对象的职责。相比来说,创建型模式关注对象的创建过程,结构型模式关注对象和类的组合关系。
模式的职责
提供一种可以遍历聚合对象的方式。
模式的结构
聚合对象:存储数据
迭代器:遍历数据
模式的实现
public interface MyIterator { void first();//将游标指向第一个元素() void next();//将游标指向下一个元素 Object getCurrentObj(); boolean hasNext();//判断是否有下一个元素 //这两个可以有也可以没有 boolean isfirst();//判断是否是第一个元素 boolean isLast();//判断是否是最后一个元素}public class ConcreteMyaggregate { //承载需要迭代的容器 private List<Object> list = new ArrayList<Object>(); public ConcreteMyaggregate(List<Object> list){ super(); this.list =list; } public void addObject(Object obj){ list.add(obj); } public void removeObject(Object obj){ list.remove(obj); } public List<Object> getList() { return list; } public void setList(List<Object> list) { this.list = list; } //外部获得迭代器的类的方法 public MyIterator createIterator(){ return new ConcreteItertor(); } //使用内部类定义迭代器,可以直接使用外部类的属性 private class ConcreteItertor implements MyIterator{ //迭代器的游标 private int cursor; public void first() { cursor = 0; } //迭代器的真正实现 public Object getCurrentObj() { return list.get(cursor); } public boolean hasNext() { if(cursor<list.size()){ return true; } return false; } public boolean isLast() { return cursor == (list.size()-1)?true:false; } public boolean isfirst() { return cursor == 0?true:false; } public void next() { if(cursor<list.size()) cursor++; } }}//客户端调用public class Client { public static void main(String[] args) { //创建容器,往容器中放入对象 ConcreteMyaggregate cma = new ConcreteMyaggregate(null); cma.addObject("a"); cma.addObject("b"); cma.addObject("c"); //创建迭代器,取出对象 MyIterator iter = cma.createIterator(); //只要还有对象,就取出对象,并把游标往下一个 while(iter.hasNext()){ System.out.println(iter.getCurrentObj()); iter.next(); } }}
其他说明
这个实现案例是用正向遍历的迭代器,其实也可以实现逆向遍历的迭代器(就是每次都把游标向前一位的那种)。
JDK内置的迭代器(List/Set)里面也是用的这种方式。
0 0
- 设计模式GOF23——迭代器模式
- 【设计模式】—Gof23种设计模式
- 设计模式GOF23——工厂模式
- 设计模式GOF23——克隆模式
- 设计模式GOF23——适配器模式
- 设计模式GOF23——代理模式
- 设计模式GOF23——组合模式
- 设计模式GOF23——装饰模式
- 设计模式GOF23——外观模式
- 设计模式GOF23——策略模式
- 设计模式GOF23——状态模式
- 设计模式GOF23——观察者模式
- 设计模式GOF23——备忘录模式
- 设计模式GOF23——访问者模式
- 设计模式GOF23——命令模式
- 设计模式GOF23——开篇
- GOF23设计模式之——单例设计模式
- 设计模式GOF23——设计模式小结
- 夏令营day5总结
- floyd算法模板
- C++ lambda
- Ubuntu系统播放*.avi格式出错
- sqlmap工具使用小结
- 设计模式GOF23——迭代器模式
- Java基础学习——注解(Annotations)学习
- 洛谷P1631 序列合并
- foreach动态删除控件漏删/遍历不全
- Pro_3_UNIX下read_write输入输出的字节数不足的问题
- Python数据结构(二)序列类型list,tuple
- CVS提交代码后作者不是自己的名字
- poj 1389 Area of Simple Polygons(线段树+扫描线)
- java--基础---字符流