购物网站 wordpress 英文模板,网站的建设费用属于什么科目,免费平台,python做网站实战介绍
提供一中可以遍历聚合对象的方式。又称为: 游标cursor模式
迭代器模式角色
抽象聚合类(Aggregate)#xff1a;提供了聚合相关的方法,并提供获取迭代器的方法#xff1b;具体集合类(ConcreteAggregate):实现了抽象聚合类#xff1b;抽象迭代器(Iterator)#xff1a;…介绍
提供一中可以遍历聚合对象的方式。又称为: 游标cursor模式
迭代器模式角色
抽象聚合类(Aggregate)提供了聚合相关的方法,并提供获取迭代器的方法具体集合类(ConcreteAggregate):实现了抽象聚合类抽象迭代器(Iterator)定义了迭代相关的方法具体迭代器(ConcreteIterator): 实现了抽象迭代器的方法。
场景
需要以一种特定的方式遍历聚合对象聚合对象存储数据迭代器遍历数据
开发中常见的场景
JDK内置的迭代器(List/Set)
代码实现
抽象聚合类
/*** 抽象聚合类*/
public interface Aggregate {/*** 添加对象* param obj*/void addObject(Object obj);/*** 移除对象* param obj*/void removeObject(Object obj);/*** 获取迭代器方法* return*/MyIterator iterator();
}抽象迭代器
/*** 抽象迭代器*/
public interface MyIterator {/*** 当前游标置零*/void first(); /*** 将游标指向下一个元素*/void next(); /*** 是否存在下一个元素* return*/boolean HasNext(); /*** 判断当前对象是否第一个元素* return*/boolean isfirst(); /*** 判断当前对象是否最后一个元素* return*/boolean isLast(); /*** 获取当期游标对象* return*/Object getCurrentObj();
}具体聚合类内部类方法定义具体迭代器
public class ConcreteAggregate implements Aggregate {private ListObject list new ArrayListObject();/*** 添加对象* param obj*/Overridepublic void addObject(Object obj){list.add(obj);}/*** 移除对象* param obj*/Overridepublic void removeObject(Object obj){list.remove(obj);} /*** 获取迭代器方法* return*/Overridepublic MyIterator iterator() {return new ConcreteIterator();} /*** 使用内部类定义迭代器可以直接使用外部类的属性*/private class ConcreteIterator implements MyIterator{/*** 定义游标---用于记录遍历List容器时的位置*/private int cursor; /*** 当前游标置零*/Overridepublic void first() {cursor0;}/*** 获取当期游标对象*/Overridepublic Object getCurrentObj() {return list.get(cursor);} /*** 将游标指向下一个元素*/Overridepublic void next() {if(cursorlist.size()){cursor;}}/*** 是否存在下一个元素*/Overridepublic boolean HasNext() {if(cursorlist.size()){return true;}return false;}/*** 判断当前对象是否第一个元素*/Overridepublic boolean isfirst() {return cursor0?true:false;}/*** 判断当前对象是否最后一个元素*/Overridepublic boolean isLast() {return cursor(list.size()-1)?true:false;}}
}测试调用
public static void main(String[] args) {Aggregate cma new ConcreteMyAggregate();cma.addObject(aaa);cma.addObject(bbb);cma.addObject(ccc);MyIterator iteratorcma.iterator();while(iterator.HasNext()){System.out.println(iterator.getCurrentObj());iterator.next();}System.out.println(----------------------------------);cma.removeObject(bbb);MyIterator itercma.iterator();while(iter.HasNext()){System.out.println(iter.getCurrentObj());iter.next();}}更多设计模式学习 设计模式(1)介绍 设计模式(2)单例模式 设计模式(3)工厂模式 设计模式(4)建造者模式 设计模式(5)原型模式 设计模式(6)桥接模式 设计模式(7)装饰器模式 设计模式(8)组合模式 设计模式(9)外观模式 设计模式(10)享元模式 设计模式(11)适配器模式 设计模式(12)代理模式 设计模式(13)模板方法模式 设计模式(14)命令模式 设计模式持续更新中…