java设计模式--迭代器模式
2019-08-16 10:08:37来源:博客园 阅读 ()
java设计模式--迭代器模式
迭代器模式:提供一种方法顺序来访问一个聚合对象中的元素,并且不暴露该对象的内部表示。当我们需要去遍历一个对象时就可以考虑使用迭代器模式。
聚集抽象类
public interface Collection { Iterator createIterator(); }
具体聚集类。
public class ConcreteCollection implements Collection { private List<Object> list = new ArrayList<>(); @Override public Iterator createIterator() { return new ConcreteIterator(this); } //获取集合大小 public int count(){ return list.size(); } //添加元素 public void setList(Object object){ list.add(object); } //获取元素 public Object getList(int index){ return list.get(index); } }
迭代抽象类。
public interface Iterator { //第一个节点 Object first(); //下一个节点 Object next(); //是否遍历完成 Boolean isDone(); //当前节点 Object currentItem(); }
具体迭代类。
public class ConcreteIterator implements Iterator { private ConcreteCollection concreteCollection; private int current = 0; public ConcreteIterator(ConcreteCollection concreteCollection){ this.concreteCollection = concreteCollection; } @Override public Object first() { return concreteCollection.getList(0); } @Override public Object next() { current++; if(current<concreteCollection.count()){ return concreteCollection.getList(current); }else { return null; } } @Override public Boolean isDone() { return current >=concreteCollection.count()? true:false; } @Override public Object currentItem() { return concreteCollection.getList(current); } }
测试类。
public class Test { public static void main(String[] args) { ConcreteCollection concreteCollection = new ConcreteCollection(); concreteCollection.setList("a"); concreteCollection.setList("b"); concreteCollection.setList("c"); concreteCollection.setList("d"); ConcreteIterator concreteIterator = new ConcreteIterator(concreteCollection); Object first = concreteIterator.first(); while (!concreteIterator.isDone()){ System.out.println(concreteIterator.currentItem()); concreteIterator.next(); } } }
测试结果:
a
b
c
d
其实迭代器模式在java中早有实现,java中的集合类实现了Iterable接口,而Iterable接口中声明了一个Iterator方法,返回一个Iterator,这个Iterator接口中定义了遍历的相关方法,和上面的例子中的Iterator接口类似。
原文链接:https://www.cnblogs.com/yimengyizhen/p/11163892.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 国外程序员整理的Java资源大全(全部是干货) 2020-06-12
- 2020年深圳中国平安各部门Java中级面试真题合集(附答案) 2020-06-11
- 2020年java就业前景 2020-06-11
- 04.Java基础语法 2020-06-11
- Java--反射(框架设计的灵魂)案例 2020-06-11
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash