迭代器模式(一):销售管理系统中数据的遍历
来源:互联网 发布:占领中环 知乎 编辑:程序博客网 时间:2024/05/16 07:29
图1电视机遥控器与电视机示意图
在软件开发中,也存在大量类似电视机一样的类,它们可以存储多个成员对象(元素),这些类通常称为聚合类(Aggregate Classes),对应的对象称为聚合对象。为了更加方便地操作这些聚合对象,同时可以很灵活地为聚合对象增加不同的遍历方法,我们也需要类似电视机遥控器一样的角色,可以访问一个聚合对象中的元素但又不需要暴露它的内部结构。本章我们将要学习的迭代器模式将为聚合对象提供一个遥控器,通过引入迭代器,客户端无须了解聚合对象的内部结构即可实现对聚合对象中成员的遍历,还可以根据需要很方便地增加新的遍历方式。
1 销售管理系统中数据的遍历
Sunny软件公司为某商场开发了一套销售管理系统,在对该系统进行分析和设计时,Sunny软件公司开发人员发现经常需要对系统中的商品数据、客户数据等进行遍历,为了复用这些遍历代码,Sunny公司开发人员设计了一个抽象的数据集合类AbstractObjectList,而将存储商品和客户等数据的类作为其子类,AbstractObjectList类结构如图2所示:
图2 AbstractObjectList类结构图
在图2中,List类型的对象objects用于存储数据,方法说明如表1所示:
表1 AbstractObjectList类方法说明
方法名
方法说明
AbstractObjectList()
构造方法,用于给objects对象赋值
addObject()
增加元素
removeObject()
删除元素
getObjects()
获取所有元素
next()
移至下一个元素
isLast()
判断当前元素是否是最后一个元素
previous()
移至上一个元素
isFirst()
判断当前元素是否是第一个元素
getNextItem()
获取下一个元素
getPreviousItem()
获取上一个元素
AbstractObjectList类的子类ProductList和CustomerList分别用于存储商品数据和客户数据。
Sunny软件公司开发人员通过对AbstractObjectList类结构进行分析,发现该设计方案存在如下几个问题:
(1)在图2所示类图中,addObject()、removeObject()等方法用于管理数据,而next()、isLast()、previous()、isFirst()等方法用于遍历数据。这将导致聚合类的职责过重,它既负责存储和管理数据,又负责遍历数据,违反了“单一职责原则”,由于聚合类非常庞大,实现代码过长,还将给测试和维护增加难度。
(2)如果将抽象聚合类声明为一个接口,则在这个接口中充斥着大量方法,不利于子类实现,违反了“接口隔离原则”。
(3)如果将所有的遍历操作都交给子类来实现,将导致子类代码庞大,而且必须暴露AbstractObjectList的内部存储细节,向子类公开自己的私有属性,否则子类无法实施对数据的遍历,这将破坏AbstractObjectList类的封装性。
如何解决上述问题?解决方案之一就是将聚合类中负责遍历数据的方法提取出来,封装到专门的类中,实现数据存储和数据遍历分离,无须暴露聚合类的内部属性即可对其进行操作,而这正是迭代器模式的意图所在。
【作者:刘伟 http://blog.csdn.net/lovelion】
- 迭代器模式(一):销售管理系统中数据的遍历
- 迭代器模式(三):销售管理系统中数据的遍历的迭代器模式解决方案
- 求一销售管理系统的完整代码
- 急!《房屋销售管理系统》的数据库
- JavaGUI(Swing)版本销售管理系统
- 销售学生管理系统
- 销售管理系统
- 销售管理系统
- 销售管理系统
- 销售管理系统功能
- 书店会员销售系统(一)
- 中普客户销售管理系统 v2.0 免费
- 中普客户销售管理系统 破解软件
- 销售系统中使用的存储过程
- 学生管理系统中遇到的问题总结(一)
- 新锐房地产销售管理系统(部分流程)技术解析(十) 销售管理_销售优惠设置
- 在线医药销售管理系统
- 急!《房屋销售管理系统》 .
- 问题记录
- LeetCode Delete Node in a Linked List
- JDK5至JDK8的新特性
- 正则表达式炼级攻略
- Spring mvc的相关问题
- 迭代器模式(一):销售管理系统中数据的遍历
- TCP&UDP部分细节
- tar 压缩与解压命令(汇总)
- Regionals 2014 >> Latin America >> 6828 - Help cupid
- POJ 2987 Firing(最大权闭合)
- HDU1032 - The 3n + 1 problem (暴力)
- 关于Android studio彻底修改包名的解决办法
- Android适配器-附万能适配器工具类
- 直接插入排序的两种实现方式