java设计模式(行为型)之迭代器模式
来源:互联网 发布:linux 僵尸进程 编辑:程序博客网 时间:2024/06/03 07:56
第0章:简介
迭代器模式定义:提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示
迭代器模式本质:控制访问聚合对象中的元素
参考:http://chjavach.iteye.com/blog/1634793 ,研磨设计模式(书籍),大话设计模式(书籍)
模式图:
待补充
第1章:实践
第0节:单向迭代器模式
(1)聚合对象接口(Aggregate.java)
package com.mcc.core.designPattern.behavior.iterator.singleIterator;/**
* 聚合对象接口,聚合包括集合和数组
*
* @author <a href="mailto:417877417@qq.com">menergy</a>
* DateTime: 14-3-16 下午12:32
*/
public abstract class Aggregate {
/**
* 获取当前元素
* @param index
* @return
*/
public abstract Object get(int index);
/**
* 获取聚合大小
* @return
*/
public abstract int size();
/**
* 创建迭代器对象
* @return
*/
public abstract Iterator createIterator();
}
(2)迭代器实现类(AggregateExtends.java)
package com.mcc.core.designPattern.behavior.iterator.singleIterator;/**
* 迭代器实现类,类似的实现类可以有多个,这里只用数组迭代为例,集合也是同理
*
* @author <a href="mailto:417877417@qq.com">menergy</a>
* DateTime: 14-3-16 下午12:36
*/
public class AggregateExtends extends Aggregate {
//聚合对象具体内容
private String[] strings = null;
/**
* 构造器,传入聚合内容
*/
public AggregateExtends(String[] strings){
this.strings = strings;
}
/**
* 获取当前元素
* @param index
* @return
*/
@Override
public Object get(int index){
Object obj = null;
if(index < strings.length){
obj = strings[index];
}
return obj;
}
/**
* 获取聚合大小
* @return
*/
@Override
public int size(){
return this.strings.length;
}
/**
* 创建迭代器
* @return
*/
@Override
public Iterator createIterator() {
return new IteratorImpl(this);
}
}
(3)迭代器接口(Iterator.java)
package com.mcc.core.designPattern.behavior.iterator.singleIterator;/**
* 迭代器接口,单向迭代器
*
* 迭代器模式的定义:提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示
* 迭代器模式的本质:控制访问聚合对象中的元素
*
* @author <a href="mailto:417877417@qq.com">menergy</a>
* DateTime: 14-3-16 下午12:24
*/
public interface Iterator {
/**
* 移动到第一个位置
*/
public void first();
/**
* 移动到下一个位置
*/
public void next();
/**
* 判断是否有下一个位置
* @return
*/
public boolean hasNext();
/**
* 获取当前元素
* @return
*/
public Object currentItem();
}
(4)迭代器实现(IteratorImpl.java)
package com.mcc.core.designPattern.behavior.iterator.singleIterator;/**
* 迭代器实现,单向迭代器
*
* @author <a href="mailto:417877417@qq.com">menergy</a>
* DateTime: 14-3-16 下午12:28
*/
public class IteratorImpl implements Iterator {
//内部索引
private int index = -1;
//持有被迭代的具体聚合对象
private Aggregate aggregate;
/**
* 构造器,传入具体聚合对象
* @param aggregate
*/
public IteratorImpl(Aggregate aggregate){
this.aggregate = aggregate;
}
/**
* 设置为第一位置
*/
@Override
public void first() {
index = 0;
}
/**
* 设置为下一个位置
*/
@Override
public void next() {
if(index < this.aggregate.size() - 1){
index = index + 1;
}
}
/**
* 是否有下一个位置
* @return
*/
@Override
public boolean hasNext() {
return index < this.aggregate.size() - 1;
}
/**
* 获取当前位置
* @return
*/
@Override
public Object currentItem() {
return this.aggregate.get(index);
}
}
(5)客户端测试类(Client.java)
package com.mcc.core.designPattern.behavior.iterator.singleIterator;/**
* 客户端测试类
*
* @author <a href="mailto:417877417@qq.com">menergy</a>
* DateTime: 14-3-16 下午12:55
*/
public class Client {
public static void main(String args[]){
String[] strings = {"test1","test2","test3","test4"};
//创建聚合对象
Aggregate aggregate = new AggregateExtends(strings);
//迭代器
Iterator it = aggregate.createIterator();
//迭代输出
while(it.hasNext()){
//位置下移
it.next();
//取出当前元素
Object obj = it.currentItem();
System.out.println("当前元素:" + obj);
}
}
}
第1节:双向迭代器模式
(1)聚合对象接口(Aggregate.java)
package com.mcc.core.designPattern.behavior.iterator.singleIterator;/**
* 聚合对象接口,聚合包括集合和数组
*
* @author <a href="mailto:417877417@qq.com">menergy</a>
* DateTime: 14-3-16 下午12:32
*/
public abstract class Aggregate {
/**
* 获取当前元素
* @param index
* @return
*/
public abstract Object get(int index);
/**
* 获取聚合大小
* @return
*/
public abstract int size();
/**
* 创建迭代器对象
* @return
*/
public abstract Iterator createIterator();
}
(2)迭代器实现类(AggregateExtends.java)
package com.mcc.core.designPattern.behavior.iterator.singleIterator;/**
* 迭代器实现类,类似的实现类可以有多个,这里只用数组迭代为例,集合也是同理
*
* @author <a href="mailto:417877417@qq.com">menergy</a>
* DateTime: 14-3-16 下午12:36
*/
public class AggregateExtends extends Aggregate {
//聚合对象具体内容
private String[] strings = null;
/**
* 构造器,传入聚合内容
*/
public AggregateExtends(String[] strings){
this.strings = strings;
}
/**
* 获取当前元素
* @param index
* @return
*/
@Override
public Object get(int index){
Object obj = null;
if(index < strings.length){
obj = strings[index];
}
return obj;
}
/**
* 获取聚合大小
* @return
*/
@Override
public int size(){
return this.strings.length;
}
/**
* 创建迭代器
* @return
*/
@Override
public Iterator createIterator() {
return new IteratorImpl(this);
}
}
(3)迭代器接口(Iterator.java)
package com.mcc.core.designPattern.behavior.iterator.doubleIterator;/**
* 迭代器接口,双向迭代器
*
* @author <a href="mailto:417877417@qq.com">menergy</a>
* DateTime: 14-3-16 下午12:24
*/
public interface Iterator {
/**
* 移动到第一个位置
*/
public void first();
/**
* 移动到下一个位置
*/
public void next();
/**
* 判断是否有下一个位置
* @return
*/
public boolean hasNext();
/**
* 获取当前元素
* @return
*/
public Object currentItem();
/**
* 移动到上一个位置
*/
public void previous();
/**
* 判断是否有上一个位置
*/
public boolean hasPrevious();
}
(4)迭代器实现(IteratorImpl.java)
package com.mcc.core.designPattern.behavior.iterator.doubleIterator;/**
* 迭代器实现
*
* @author <a href="mailto:417877417@qq.com">menergy</a>
* DateTime: 14-3-16 下午12:28
*/
public class IteratorImpl implements Iterator {
//内部索引
private int index = -1;
//持有被迭代的具体聚合对象
private Aggregate aggregate;
/**
* 构造器,传入具体聚合对象
* @param aggregate
*/
public IteratorImpl(Aggregate aggregate){
this.aggregate = aggregate;
}
/**
* 设置为第一位置
*/
@Override
public void first() {
index = 0;
}
/**
* 设置为下一个位置
*/
@Override
public void next() {
if(index < this.aggregate.size() - 1){
index = index + 1;
}
}
/**
* 是否有下一个位置
* @return
*/
@Override
public boolean hasNext() {
return index < this.aggregate.size() - 1;
}
/**
* 获取当前位置
* @return
*/
@Override
public Object currentItem() {
return this.aggregate.get(index);
}
/**
* 移动到前一个位置
*/
@Override
public void previous() {
if(index > 0){
index = index - 1;
}
}
/**
* 是否有前一个位置
* @return
*/
@Override
public boolean hasPrevious() {
return index > 0;
}
}
(5)客户端测试类(Client.java)
package com.mcc.core.designPattern.behavior.iterator.doubleIterator;/**
* 客户端测试类
*
* @author <a href="mailto:417877417@qq.com">menergy</a>
* DateTime: 14-3-16 下午12:55
*/
public class Client {
public static void main(String args[]){
String[] strings = {"test1","test2","test3","test4"};
//创建聚合对象
Aggregate aggregate = new AggregateExtends(strings);
//迭代器
Iterator it = aggregate.createIterator();
//迭代输出
while(it.hasNext()){
//位置下移
it.next();
//取出当前元素
Object obj = it.currentItem();
System.out.println("正向迭代元素:" + obj);
}
//反向迭代输出
while(it.hasPrevious()){
//位置下移
it.previous();
//取出当前元素
Object obj = it.currentItem();
System.out.println("反向迭代元素:" + obj);
}
}
}
第2节:java自带迭代器模式
(1)聚合对象接口(Aggregate.java)
package com.mcc.core.designPattern.behavior.iterator.javaIterator;import java.util.Iterator;
/**
* 聚合对象接口,聚合包括集合和数组
*
* @author <a href="mailto:417877417@qq.com">menergy</a>
* DateTime: 14-3-16 下午12:32
*/
public abstract class Aggregate {
/**
* 获取当前元素
* @param index
* @return
*/
public abstract Object get(int index);
/**
* 获取聚合大小
* @return
*/
public abstract int size();
/**
* 创建迭代器对象,调用java自带的迭代器
* @return
*/
public abstract Iterator createIterator();
}
(2)迭代器实现类(AggregateExtends.java)
package com.mcc.core.designPattern.behavior.iterator.javaIterator;import java.util.Arrays;
import java.util.Iterator;
/**
* 迭代器实现类,类似的实现类可以有多个,这里只用数组迭代为例,集合也是同理
*
* @author <a href="mailto:417877417@qq.com">menergy</a>
* DateTime: 14-3-16 下午12:36
*/
public class AggregateExtends extends Aggregate {
//聚合对象具体内容
private String[] strings = null;
/**
* 构造器,传入聚合内容
*/
public AggregateExtends(String[] strings){
this.strings = strings;
}
/**
* 获取当前元素
* @param index
* @return
*/
@Override
public Object get(int index){
Object obj = null;
if(index < strings.length){
obj = strings[index];
}
return obj;
}
/**
* 获取聚合大小
* @return
*/
@Override
public int size(){
return this.strings.length;
}
/**
* 创建迭代器,调用java自带的迭代器
* @return
*/
@Override
public Iterator createIterator() {
return Arrays.asList(strings).iterator();
}
}
(3)迭代器实现(IteratorImpl.java)
package com.mcc.core.designPattern.behavior.iterator.javaIterator;import java.util.Iterator;
/**
* 迭代器实现,实现java自带的迭代器
*
* @author <a href="mailto:417877417@qq.com">menergy</a>
* DateTime: 14-3-16 下午12:28
*/
public class IteratorImpl implements Iterator {
//内部索引
private int index = -1;
//持有被迭代的具体聚合对象
private Aggregate aggregate;
/**
* 构造器,传入具体聚合对象
* @param aggregate
*/
public IteratorImpl(Aggregate aggregate){
this.aggregate = aggregate;
}
/**
* 是否有下一个元素
* @return
*/
@Override
public boolean hasNext() {
return index < this.aggregate.size() - 1;
}
/**
* 取当前元素后下移一个位置
* @return
*/
@Override
public Object next() {
Object obj = null;
if (hasNext()){
obj = aggregate.get(index);
index++;
}
return obj;
}
@Override
public void remove() {
//暂不实现
}
}
(4)客户端测试类(Client.java)
package com.mcc.core.designPattern.behavior.iterator.javaIterator;import java.util.Iterator;
/**
* 客户端测试类
*
* @author <a href="mailto:417877417@qq.com">menergy</a>
* DateTime: 14-3-16 下午12:55
*/
public class Client {
public static void main(String args[]){
String[] strings = {"test1","test2","test3","test4"};
//创建聚合对象
Aggregate aggregate = new AggregateExtends(strings);
//迭代器
Iterator it = aggregate.createIterator();
//迭代输出
while(it.hasNext()){
//取出当前元素并位置下移
Object obj = it.next();
System.out.println("当前元素:" + obj);
}
}
}
0 0
- Java设计模式之行为型模式(迭代器模式)
- java设计模式(行为型)之迭代器模式
- Java设计模式(行为型)之-迭代器模式
- Java设计模式之行为型模式(命令模式)
- Java设计模式之行为型模式(备忘录模式)
- Java设计模式之行为型模式(观察者模式)
- Java设计模式之行为型模式(状态模式)
- Java设计模式之行为型模式(策略模式)
- Java设计模式之行为型模式(模板模式)
- Java设计模式之行为型模式(访问者模式)
- java设计模式之行为型模式
- 详解java设计模式(四)之迭代器模式(行为型)
- java设计模式(行为型)之职责链模式
- java设计模式(行为型)之命令模式
- java设计模式(行为型)之解析器模式
- java设计模式(行为型)之中介者模式
- java设计模式(行为型)之备忘录模式
- java设计模式(行为型)之观察者模式
- mybatis学习 from : http://blog.csdn.net/fairyhawk/article/details/8617549
- poj.2299
- 苹果iOS 8最值得期待的十大特性:支持移动支付
- sql where 1=1和 0=1 的作用
- 解析阿里巴巴为什么选择赴美上市
- java设计模式(行为型)之迭代器模式
- 简要解析JavaBean.
- JavaScript Window- 浏览器对象模型和W3C
- 增长与利润,处于上升期的创业公司应选择哪个?
- spring错误 org.springframework.dao.DataAccessException cannot be resolved
- poj.3349
- c语言的代码简化
- Leetcode_longest-common-prefix
- JavaScript注册验证