项目地址:https://gitee.com/caochenlei/design-pattern
迭代器模式的介绍:
在现实生活以及程序设计中,经常要访问一个聚合对象中的各个元素,如“数据结构”中的链表遍历,通常的做法是将链表的创建和遍历都放在同一个类中,但这种方式不利于程序的扩展,如果要更换遍历方法就必须修改程序源代码,这违背了“开闭原则”。
迭代器模式(Iterator Pattern)是 Java 和 .Net 编程环境中非常常用的设计模式。这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。迭代器模式属于行为型模式。
迭代器模式的优点:
迭代器模式的缺点:
迭代器模式的场景:
迭代器模式的角色:
Iterator
public interface Iterator {
Object first();
Object next();
boolean hasNext();
}
ConcreteIterator
public class ConcreteIterator implements Iterator {
private List<Object> list;
private int index = -1;
public ConcreteIterator(List<Object> list) {
this.list = list;
}
@Override
public boolean hasNext() {
if (index < list.size() - 1) {
return true;
} else {
return false;
}
}
@Override
public Object first() {
index = 0;
Object obj = list.get(index);
return obj;
}
@Override
public Object next() {
Object obj = null;
if (this.hasNext()) {
obj = list.get(++index);
}
return obj;
}
}
Aggregate
public interface Aggregate {
void add(Object obj);
void remove(Object obj);
Iterator getIterator();
}
ConcreteAggregate
public class ConcreteAggregate implements Aggregate {
private List<Object> list = new ArrayList<>();
public void add(Object obj) {
list.add(obj);
}
public void remove(Object obj) {
list.remove(obj);
}
public Iterator getIterator() {
return new ConcreteIterator(list);
}
}
Client
public class Client {
public static void main(String[] args) {
Aggregate ag = new ConcreteAggregate();
ag.add("张三");
ag.add("李四");
ag.add("王五");
Iterator it = ag.getIterator();
while (it.hasNext()) {
Object object = it.next();
System.out.println(object.toString());
}
}
}
张三
李四
王五
JDK 的 ArrayList 集合中就使用了迭代器模式。
public class ArrayListTest {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("张三");
list.add("李四");
list.add("王五");
Iterator<String> it = list.iterator();
while (it.hasNext()) {
Object object = it.next();
System.out.println(object);
}
}
}
张三
李四
王五
1.ajax跨域传递值是所需要的回传的类型为jsonp $.ajax({url: "http://.......",t...
昨天刚学了html的一些内容,就迫不及待的想做个京东上面的搜索条,结果做是做出...
首先插件配备好了,写一个HTML测试一下 首先创建一个文件夹,创建一个HTML 文件...
IT之家2月18日消息外媒 Windows Latest 报道,微软正在与谷歌合作进行一项新的改...
JSP spring boot / cloud 使用filter防止XSS 一.前言 XSS(跨站脚本攻击) 跨站脚...
文章目录 前言 本周最重要的五件事情 本周搞砸的四件事情 本周的四个启发 前言 ...
一.前言 .NET Core 是一个通用开发平台,由 Microsoft 和 GitHub 上的 .NET 社区...
2 月 18 日消息 据外媒 Windowslatest 报道,在预览版本中发现的参考资料表明,...
在项目开始之前我们可以先去了解一下IConfiguration接口,.Net Core Web应用程序...
第一课趣味二进制——修改植物大战僵尸数据 任务介绍 学习目标 知识需求 需求工...