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 ...
随机推荐
- Update(Stage4):sparksql:第1节 SparkSQL_使用场景_优化器_Dataset & 第2节 SparkSQL读写_hive_mysql_案例
目标 SparkSQL 是什么 SparkSQL 如何使用 Table of Contents 1. SparkSQL 是什么 1.1. SparkSQL 的出现契机 1.2. SparkSQL 的适 ...
- centos 安装phpize
yum -y install php-devel 然后 /usr/bin/phpize
- php面试题之PHP核心技术
一.PHP核心技术 更多PHP相关知识请关注我的专栏PHPzhuanlan.zhihu.com 1.写出一个能创建多级目录的PHP函数(新浪网技术部) <?php /** * 创建多级目录 * ...
- Spring Boot 2 实战:如何自定义 Servlet Filter
1.前言 有些时候我们需要在 Spring Boot Servlet Web 应用中声明一些自定义的 Servlet Filter 来处理一些逻辑.比如简单的权限系统.请求头过滤.防止 XSS 攻击等 ...
- HA: Armour-Write-up
下载地址:点我 bilibili:点我 信息收集 nmap扫存活找到IP为:192.168.116.140 ➜ ~ nmap -sn 192.168.116.1/24 Starting Nmap 7. ...
- 什么是CSRF攻击?如何避免?
跨站请求伪造(英语:Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或者 XSRF, 是一 ...
- char、pchar、string互相转换
1.string转换成pchar 可以使用pchar进行强制类型转换,也可以使用StrPCopy函数 var s:string; p,p1:PChar; begin s:='Hello Delphi' ...
- SOAP1.1 VS SOAP1.2
SOAP提升: 目前WebService的协议主要有SOAP1.1和1.2.两者的命名空间不同. 见下页对比 SOAP1.1版本与SOAP1.2版本在头信息上存在差异.SOAP1.1存在SOAPAct ...
- Java基础知识笔记第二章:基本数据类型与数组
标识符和关键字 标识符: 1:字母,数字,下划线,美元符号 2.不能以数字开头 3.标识符不能是:true false null(尽管true false null不是java的关键字 ...
- NGINX学习积累(学习牛人)
大牛:http://www.cnblogs.com/zengkefu/p/5563608.html 当请求来临的时候,NGINX会选择进入虚拟主机,匹配location后,进入请求处理阶段. 在请求处 ...