设计模式->行为型模式->迭代器模式
来源:互联网 发布:安知玉如意好看吗 编辑:程序博客网 时间:2024/05/20 04:28
1.定义:提供一种方法访问容器对象中的各个元素,但是不暴露容器中对象的内部细节
2.UML
3.涉及角色
1.抽象迭代器角色:定义了遍历以及访问容器对象的行为
2.抽象容器角色:定义了对容器的操作以及获得该容器迭代器的行为
3.具体迭代器:抽象迭代器具体子类,即遍历以及访问容器对象具体逻辑的实现者
4.具体角色容器:容器操作具体逻辑以及获得迭代器的具体实现
4.优点
1.访问容器对象中的各个元素,但是不暴露容器中对象的内部细节
5.缺点
JDK将该模式融入API,所以该模式不很长,JDK提供的API已经满足需要
6.使用场景
1.自己编写系统级别的应用
2.系统中没有现有的迭代器使用
7.code
抽象迭代角色
如果迭代器存在删除方法,那么该方法需要完成两个逻辑1.删除当前元素 2.游标需要指向下一个元素
public interface Iterator<T> { public T next(); public boolean hasNext();}抽象容器角色
public interface IContainer<T> { public void add(T t); public void remove(T t); public Iterator<T> iterator(); public int size();}具体迭代角色
public class ConcreteIterator<T> implements Iterator<T> { private Vector<T> vector = new Vector<T>(); private int cursor = 0; public ConcreteIterator() { super(); } public ConcreteIterator(Vector<T> vector) { this.vector = vector; } @Override public T next() { return this.hasNext() ? this.vector.get(this.cursor++) : null ; } @Override public boolean hasNext() { if(this.cursor == this.vector.size()) { return false; } else { return true; } }}具体容器角色
public class ConcreteContainer<T> implements IContainer<T>{ private Vector<T> vector = new Vector<T>(); @Override public void add(T t) { this.vector.add(t); } @Override public void remove(T t) { this.vector.remove(t); } @Override public Iterator iterator() { return new ConcreteIterator<T>(this.vector); } @Override public int size() { return this.vector.size(); }}
阅读全文
0 0
- 设计模式 - 行为型模式 - 迭代器模式
- 设计模式->行为型模式->迭代器模式
- 设计模式--行为型--迭代器模式
- [设计模式-行为型]迭代器模式(Iterator)
- 设计模式-行为型之迭代器模式
- 行为型设计模式-迭代器模式
- 行为型设计模式-迭代器模式
- 设计模式-行为型模式
- [设计模式]--行为型模式
- 设计模式:行为型模式
- 设计模式--行为型模式
- 设计模式--行为型模式
- 设计模式----行为型模式
- 设计模式 -- 行为型模式
- 设计模式-行为-迭代器
- 行为型设计模式
- 行为型设计模式
- 设计模式-行为型
- vue.js 底部导航栏 一级路由显示 子路由不显示
- robotframework的mac版本安装
- Layui自定义模块基础学习
- Docker Swarm 和Swarm mode 是两个概念!!
- nagios安装使用指南
- 设计模式->行为型模式->迭代器模式
- 最长公共子序列LCS-DP
- TCP的三次握手四次分手详解
- input标签的method属性 post与get的区别
- 通过nginx访问静态文件配置
- Qt实现TCP通信简例
- 1012: [JSOI2008]最大数maxnumber 单调栈+二分
- printf开启关闭宏-方便调试
- AttributeError: module 'urllib' has no attribute 'urlopen'