设计模式之-迭代器模式
来源:互联网 发布:无印良品淘宝 编辑:程序博客网 时间:2024/04/29 21:57
软件开发中常会出现这样一种情况,一个接口里面有某类数据的增删改,也有这类数据的遍历方法,对于子类来说实现这个借口,则必须实现所有的借口方法,一旦想要更改一种新的遍历方式,则需要修改借口。这就违背了软件设计的开闭原则。同时,由于过多的借口方法设计在借口里面,这样任何一个子类都必须实现所有的方法,造成子类对象的溶于,很可能有些方法不是子类所需要的,同样这样也违背了接口隔离原则,当然要想严格的遵守接口隔离原则,对于接口的设计不大也不小,这需要对业务系统有很清晰的认识,对于方法的提炼也应该准确。同时,对于子类来说,也暴漏了父类的属性信息,因为子类也同样实现了添加的各种方法,这也违背了软件设计的封装性。
针对以上这种现象,便引入了迭代器模式。这里分为两个概念:第一个,是聚合类,也就是管理数据,否则数据的添加,删除,第二个 就是迭代器,他负责遍历聚合类数据。为此,我们可以设计聚合抽象类,注意要针对抽象编程,方便扩展,里面只有数据的添加,删除;在设计迭代器抽象类,负责遍历元素。当然,也需要在聚合抽象类里面引入创建迭代器的工厂方法,方便在创建聚合类的时候引入迭代器,当然,在具体的迭代器里面也引入了聚合类的引用,这样方便遍历数据元素。到这里,可以说一个小技巧,不难发现,在聚合类里面和迭代器里面都有双向的关联,如果我们不想再聚和类里面引入迭代器的引用,不放可以把迭代器设置为聚合类的内部类,这样对于迭代器类,就可以访问聚合类里面的数据元素了。这是内部类的一个小作用。
至此,如果我们想增加一个新的迭代器,只需要实现迭代器借口即可。对于java的JDK设计也是引用了此模式,collection和iterator分别就是对应聚合类和迭代器抽象类,里面定义的方法可以查看源码。collection借口的实现类则代表聚合类的具体实现,当然如果迭代器接口里面方法不能满足需求,则可以继承此接口,写新的接口,并写心得借口方法。
如LInkeList的listiterator迭代器借口,就是如此,具体参考源码了解。
到此为止,迭代器模式基本理论已经完成,具体代码可以参考设计模式。
- 设计模式之迭代器模式
- 设计模式之 迭代器模式
- 设计模式之迭代器模式
- 设计模式之迭代器模式
- 设计模式之--迭代器模式
- 设计模式之迭代器模式
- 设计模式之迭代器模式
- 设计模式之迭代器模式
- 设计模式之-迭代器模式
- 设计模式之迭代器模式
- 设计模式之迭代器模式
- 设计模式之迭代器模式
- 设计模式之迭代器模式
- 设计模式之迭代器模式
- 设计模式 之 迭代器模式
- 设计模式 之 迭代器模式
- 设计模式之迭代器模式
- 设计模式之迭代器模式
- iBATIS一对多/多对多N+1问题解决方案
- GlassFish下手动部署JSF程序
- rails环境下安装extjs4
- Dll的远程线程注入之关键代码描述总结
- 《C++ Primer》习题12.38——12.40
- 设计模式之-迭代器模式
- 安装SharePoint报错:系统从以前的安装重新启动,或更新正在等待错误(原)
- Java反射机制及应用(一)
- 铁路现代化技术系统整理(一)之TDCS
- Android实现局部图片滑动指引效果
- 《算法导论》学习笔记 第四章&&第五章
- rqnoj-643
- STL Priority_Queue
- uva11889