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 ...
随机推荐
- Nexus-FEX基础配置
1.FEX基本配置feature fex fex 100 pinning max-links 1 >>>>该值默认就是1 description "FEX100 ...
- 蓝桥杯-铺瓷砖(dfs)
问题描述 有一长度为N(1< =N< =10)的地板,给定两种不同瓷砖:一种长度为1,另一种长度为2,数目不限.要将这个长度为N的地板铺满,一共有多少种不同的铺法? 例如,长度为4的地面一 ...
- 「JSOI2010」排名
「JSOI2010」排名 传送门 看到先后顺序限制和字典序,很容易想到拓扑排序 + 贪心. 考虑具体做法: 对于第一问: 我们开一个大根堆来代替队列,然后从大到小构造出各个元素的排名. 我们连边 \( ...
- 2.1.1Remove Duplicates from Sorted Arr
/* 题目:2.1.1 Remove Duplicates from Sorted Array Given a sorted array, remove the duplicates in place ...
- postman使用get请求的url地址传参中文乱码问题
编码之后
- 装有Ubuntu的硬盘插入到电脑中无法进入
前言 前段时间,由于自己作死,将BIOS的CPU电压设置解锁,导致BIOS芯片烧坏.在将电脑返厂维修后,我把装有Ubuntu18.04系统的固态硬盘插入到电脑中,但是电脑无法进入grub,采取任何方法 ...
- Win32 开发记录
Typedefs LPCSTR = char* LPCWSTR = wchar_t* Webpages Control reference: https://docs.microsoft.com/en ...
- EC20指令
SIM卡热插拔检测: AT+QSIMSTAT=1 //开启SIM卡热拔插状态报告AT+QSIMDET=1,1或AT+QSIMDET=1,0//开启 SIM卡检测功能当SIM卡拔出或者 ...
- rem与部分手机 字体偏大问题
原因是部分手机自己设置了巨无霸字体.
- Vue和vue-template-compiler版本不一致
vue项目,package.json中Vue和vue-template-compiler版本不一致时,执行npm run dev有时会报错, 提示vue和vue-template-compiler版本 ...