java设计模式:迭代器设计模式
来源:互联网 发布:java判断图片尺寸 编辑:程序博客网 时间:2024/05/01 10:55
package com.selfStudy;import java.util.*;/* * [结合java:四器 之 迭代器](http://blog.csdn.net/managementandjava/article/details/51404884) * * 通过以下两个例子来展现iterator的用法; * 首先理解下为什么存在迭代器; * 迭代器就是集合取出元素的方式; * 因为每个容器都有 存和取的功能,由于每个容器的数据存储结构不同,其存和取的方式也就不同;而对于取出元素,其不止一个动作来完成(先判断 再取等多个动作) * 那么这多个动作就应该封装成一个对象;这样每个容器中就都有一个取出数据的对象;因为不同容器的数据结构不同,因此每个容器中取出对象的实现方式也不一样; * 那么就应该在每个容器内部 定义一个取出元素的内部类(因为数据就存在这个容器中,直接用内部类来操作这些数据时最方方便的,因此用内部类),但是这些取出 * 的内部类有自己的共性东西 都有 判断和取出。因此就可以向上抽取成一个接口(Iterator) * * 对内部类的理解和迭代器设计模式的理解: * 内部类: 容器是一个事物,而容器内部存储的东西也是一个事物,那么就可以定一个内部类在容器内操容器内的事物; * 迭代器设计模式:多个类都有自己操作其内部数据的方式,而这些方式又有相同的共性,那么就可以把这个共性抽取成一个接口,在各个类中提供一个方法 * 来返回这个接口,通过这个接口(进而通过内部类)来操作这多个类中的数据; * * 迭代器设计模式: * 又称游标设计模式:GOF给出的定义:提供一种方法访问一个容器对象中的各个元素,而又不暴露该对象的内部细节 * 组成元素: * 1.抽象迭代器:定义遍历元素所需要的方法,一般来说会有这么三个方法:next(),hasNext()和remove(), * 2.迭代器实现:实现迭代器接口中定义的方法,完成集合的迭代。 * 3.抽象容器:一般是一个接口,提供一个iterator()方法,例如java中的Collection接口,List接口,Set接口等。 * 4.具体容器:就是抽象容器的具体实现类,比如List接口的有序列表实现ArrayList. * * 使用场景: * 迭代器模式是与集合共生共死的,一般来说,我们只要实现一个集合,就需要同时提供这个集合的迭代器,就像java中的 * Collection,List、Set、Map等,这些集合都 * 有自己的迭代器。假如我们要实现一个这样的新的容器,当然也需要引 * 入迭代器模式,给我们的容器实现一个迭代器。 * *///实例1://1.抽象迭代器interface MyIterator{ public Object next(); public boolean hasNext();}//2.迭代器实现class MyListIterator implements MyIterator{ private List<?> list = null; public MyListIterator(List<?> list){ this.list = list; } private int count = 0; public Object next(){ Object obj=null; if(this.hasNext()){ obj = list.get(count++); } return obj; } public boolean hasNext(){ if(count==list.size()) return false; else return true; }}//抽象容器interface MyCollection{ public void addAll(Object[] objs); public MyIterator iterator();}//具体容器class MyListCollection implements MyCollection{ private List<Object> list= new ArrayList<Object>(); public void addAll(Object[] objs) { for(Object obj:objs) list.add(obj); } @Override public MyIterator iterator() { return new MyListIterator(list); }}public class IteratorModel { public static void main(String[] args) { String[] infos = "hello java : wo should say hello to the world !!".split(" "); MyListCollection mc = new MyListCollection(); mc.addAll(infos); for(MyIterator mi = mc.iterator();mi.hasNext();){ System.out.print(mi.next()+" "); } }}
输出结果:
hello java : wo should say hello to the world !!
0 0
- java设计模式---迭代器模式
- java设计模式---迭代器模式
- Java设计模式--迭代器模式
- Java设计模式--迭代器模式
- JAVA设计模式--迭代器模式
- java设计模式-------迭代器模式
- 【Java设计模式】- 迭代器模式
- JAVA 设计模式 迭代器模式
- Java设计模式-迭代器模式
- java设计模式:迭代器设计模式
- Java迭代器设计模式
- Java设计模式之迭代器模式
- Java设计模式之迭代器模式
- Java设计模式之迭代器模式
- 深入浅出Java设计模式之迭代器模式
- 深入浅出Java设计模式之迭代器模式
- 深入浅出Java设计模式之迭代器模式
- Java设计模式之迭代器模式
- SIP-Session Initiation Protocol(Abstract)
- 列车调度(Train)
- 教你爱上Block(闭包)
- Git使用教程(四)
- Windows7下安装Qt5.6时提示msvcp120.dll丢失的解决方案
- java设计模式:迭代器设计模式
- 验证码图片生成
- linux页表创建与更新
- Spring Boot 静态资源处理
- 弗洛伊德算法 路径还原
- jdk7新特性一
- Mac下安装wget
- java 线程池执行 callable 接口,future 接收callable 接口的返回值
- 批处理常用命令总结 - 批处理命令简介