Java设计模式之Iterator模式
参考:马士兵 Java设计模式 Iterator
1.首先定义一个容器Collection接口.
- package com.njupt.zhb.learn.iterator;
- public interface Collection {
- void add(Object o);
- int size();
- Iterator iterator();
- }
2.定义一个Iterator迭代器的接口
- package com.njupt.zhb.learn.iterator;
- public interface Iterator {
- Object next();
- boolean hasNext();
- }
3.定义一个ArrayList,实现Collection接口,并写一个实现了Iterator接口的内部类。
- package com.njupt.zhb.learn.iterator;
- import com.njupt.zhb.learn.iterator.Collection;
- public class ArrayList implements Collection {
- Object[] objects = new Object[10];
- int index = 0;
- public void add(Object o) {
- if(index == objects.length) {
- Object[] newObjects = new Object[objects.length * 2];
- System.arraycopy(objects, 0, newObjects, 0, objects.length);
- objects = newObjects;
- }
- objects[index] = o;
- index ++;
- }
- public int size() {
- return index;
- }
- public Iterator iterator() {
- return new ArrayListIterator();
- }
- private class ArrayListIterator implements Iterator {
- private int currentIndex = 0;
- @Override
- public boolean hasNext() {
- if(currentIndex >= index) return false;
- else return true;
- }
- @Override
- public Object next() {
- Object o = objects[currentIndex];
- currentIndex ++;
- return o;
- }
- }
- }
4.编写测试程序TestMain
- package com.njupt.zhb.learn.iterator;
- import com.njupt.zhb.learn.iterator.ArrayList;
- public class TestMain {
- public static void main(String[] args) {
- Collection c = new ArrayList();
- for(int i=0; i<15; i++) {
- c.add("string "+i);
- }
- System.out.println(c.size());
- Iterator it = c.iterator();
- while(it.hasNext()) {
- Object o = it.next();
- System.out.println(o.toString() + " ");
- }
- }
- }
运行结果:
- 15
- string 0
- string 1
- string 2
- string 3
- string 4
- string 5
- string 6
- string 7
- string 8
- string 9
- string 10
- string 11
- string 12
- string 13
- string 14
从以上可以看出,设计模式到处用到面向对象中的多态。接口调用子类中的函数。源代码下载:
http://download.csdn.net/detail/nuptboyzhb/5755295
Java设计模式之Iterator模式的更多相关文章
- Java设计模式——装饰者模式
JAVA 设计模式 装饰者模式 用途 装饰者模式 (Decorator) 动态地给一个对象添加一些额外的职责.就增加功能来说,Decorator 模式相比生成子类更为灵活. 装饰者模式是一种结构式模式 ...
- 浅析JAVA设计模式之工厂模式(一)
1 工厂模式简单介绍 工厂模式的定义:简单地说,用来实例化对象,取代new操作. 工厂模式专门负责将大量有共同接口的类实例化.工作模式能够动态决定将哪一个类实例化.不用先知道每次要实例化哪一个类. 工 ...
- JAVA设计模式--装饰器模式
装饰器模式 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装. 这种模式创建了一个装饰 ...
- 折腾Java设计模式之建造者模式
博文原址:折腾Java设计模式之建造者模式 建造者模式 Separate the construction of a complex object from its representation, a ...
- 折腾Java设计模式之备忘录模式
原文地址:折腾Java设计模式之备忘录模式 备忘录模式 Without violating encapsulation, capture and externalize an object's int ...
- 折腾Java设计模式之状态模式
原文地址 折腾Java设计模式之状态模式 状态模式 在状态模式(State Pattern)中,类的行为是基于它的状态改变的.这种类型的设计模式属于行为型模式.在状态模式中,我们创建表示各种状态的对象 ...
- 折腾Java设计模式之模板方法模式
博客原文地址:折腾Java设计模式之模板方法模式 模板方法模式 Define the skeleton of an algorithm in an operation, deferring some ...
- 折腾Java设计模式之访问者模式
博客原文地址:折腾Java设计模式之访问者模式 访问者模式 Represent an operation to be performed on the elements of an object st ...
- 折腾Java设计模式之命令模式
博客原文地址 折腾Java设计模式之命令模式 命令模式 wiki上的描述 Encapsulate a request as an object, thereby allowing for the pa ...
随机推荐
- Catalyst3560密码破解
1.关机:2.将设备MODE键按住,然后开机,进入switch:switch: flash_initInitializing Flash...flashfs[0]: 7 files, 2 direct ...
- 重新梳理IT知识之java-01语法(一)
标识符的命名规范 包名:xxxyyyzzz 类名.接口名:XxxYyyZzz (大驼峰) 变量名.方法名:xxxYyyZzz 常量名:XXX_YYY_ZZZ //**************强制类型转 ...
- 【SSM 验证码】登录验证码
LoginController /** * 登陆方法 */ @ResponseBody @RequestMapping("login2") public Map<String ...
- C语言-断言
1 作用: 断言常做语言处理的高级形式,自动处理软件隐藏很深其且它手段不易发现的错误,快速进行异常定位.同时这也是软件单元测试必须的技术. 2 使用范围: 2.1放在函数入口对入口参数进行合法性检查( ...
- JSON 解析中遇到的坑😭
最近做加解密遇到一个很“奇葩的问题”,解析服务端加密后的字符串 序列化 时一直报错 "json解析失败:Error Domain=NSCocoaErrorDomain Code=3840 & ...
- Nginx安装部署!
安装Nginx方法一:利用u盘导入Nginx软件包 二nginx -t 用于检测配置文件语法 如下报错1:配置文件43行出现错误 [root@www ~]# nginx -tnginx: [emerg ...
- nyoj 40
题目:http://acm.nyist.edu.cn/JudgeOnline/status.php?pid=40 求最大公约数和最小公倍数... 思路:欧几里德算法求出最大公约数,即最大公约数 = g ...
- Priority Queue(优先队列)
今天早上起来完成了一个完整的基于二叉堆实现的优先队列,其中包含最小优先和最大优先队列. 上篇说了优先队列的特性,通过建堆和堆排序操作,我们就已经看到了这种数据结构中的数据具有某种优先级别,要么非根节点 ...
- Navicat Premium 12安装及激活
一.安装 百度云下载地址:https://pan.baidu.com/s/1T5BjpBqLtwCy26szcKSdKw 提取码:ujzx 二.激活步骤 ①将navicat-keygen-for-x6 ...
- teraterm中log中加入时间戳
步骤: 1.Setup->Additional settings->log->Timestamp(Local Time) 2.记录log.File->log(Teraterm. ...