迭代器(iterator)模式
来源:互联网 发布:豪沃克幕墙计算软件 编辑:程序博客网 时间:2024/06/18 01:23
模式名称:迭代器模式 Iterator
描述:一个一个遍历
对代码的作用:当数据容器内存储结构发生改变,不必修改客户端遍历的代码
容器接口:
public interface Container<T> { ContainerIterator<T> iterator(); void add(T element);}迭代器接口:
public interface ContainerIterator<T> { T next(); boolean hasNext(); void setSize(int size); T prev();}
容器实现:
public class ContainerImpl<T> implements Container<T> { private Object[] elements; private int index; private int size; private ContainerIterator iterator; public ContainerImpl() { elements = new Object[10]; iterator = new ContainerIteratorImpl(elements, size); } @Override public ContainerIterator iterator() { return iterator; } @Override public void add(T element) { if(index > 9) { throw new ArrayIndexOutOfBoundsException(); } elements[index++] = element; ++size; iterator.setSize(size); }}迭代器实现:
public class ContainerIteratorImpl<T> implements ContainerIterator<T> { private int index = 0; private Object[] elements; private int size; public ContainerIteratorImpl(Object[] elements, int size) { this.elements = elements; this.size = size; } @Override public T next() { return (T)elements[index++]; } @Override public boolean hasNext() { return index < size; } @Override public void setSize(int size) { this.size = size; } @Override public T prev() { if(index < 1) { throw new ArrayIndexOutOfBoundsException(); } return (T) elements[--index]; }}
容器元素:
public class User { private String name; private int age; public User(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "User{" + "name='" + name + '\'' + ", age=" + age + '}'; }}客户端:
public class Main { public static void main(String[] args) { Container<User> userList = new ContainerImpl<>(); userList.add(new User("小明", 20)); userList.add(new User("小红", 23)); userList.add(new User("小刚", 12)); userList.add(new User("小离", 24)); ContainerIterator<User> iterator = userList.iterator(); while (iterator.hasNext()) { System.out.println(iterator.next()); } }}
UML图:
总结:当ContainerImpl内部存储结构改变 我们只需要修改迭代器实现类的实现,而无需修改客户端代码,如果只有一两处修改,修改客户端没什么,当使用量特别大的时候,就比较棘手了,只需要修改迭代器实现,一劳永逸
阅读全文
0 0
- 迭代器模式(Iterator Pattern)
- 迭代器(Iterator)模式
- 迭代器模式(Iterator pattern)
- 迭代器模式(Iterator Pattern)
- 迭代器模式(Iterator pattern)
- 迭代器模式(Iterator)
- Iterator(迭代器)模式
- 迭代器模式(Iterator pattern)
- Iterator 迭代器模式
- 迭代器模式(Iterator pattern)
- 设计模式 -- Iterator(迭代器)
- 迭代器模式(Iterator)
- 24.迭代器模式--Iterator
- 迭代器模式(Iterator)
- iterator 迭代器模式
- 迭代器模式(Iterator Pattern)
- 迭代器模式(Iterator)
- 迭代器模式【ITERATOR PATTERN 】
- 学习笔记(逆向汇编)Day1-Day5
- react-native中TouchableXXX事件的分发
- python线程池
- 2018搜狐编程题-贪心算法-二维装箱问题
- Android Multidex原理及实现
- 迭代器(iterator)模式
- Git常用的命令
- 智能指针句柄类
- 平衡二叉树的旋转
- PHP程序员进阶学习书籍参考指南
- ZOJ
- Jquery插件之Growl
- PaaS平台——多租户的RBAC权限管理(一)基本概念
- import skimage.io ImportError: No module named skimage.io(编译pycaffe报错)