8

遍历聚合对象中的元素——迭代器模式(三)

 3 years ago
source link: https://blog.csdn.net/lovelion/article/details/9992679
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

3 完整解决方案

       为了简化AbstractObjectList类的结构,并给不同的具体数据集合类提供不同的遍历方式,Sunny软件公司开发人员使用迭代器模式来重构AbstractObjectList类的设计,重构之后的销售管理系统数据遍历结构如图4所示:

SouthEast

图4 销售管理系统数据遍历结构图

(注:为了简化类图和代码,本结构图中只提供一个具体聚合类和具体迭代器类)

       在图4中,AbstractObjectList充当抽象聚合类,ProductList充当具体聚合类,AbstractIterator充当抽象迭代器,ProductIterator充当具体迭代器。完整代码如下所示:

       编写如下客户端测试代码:

       编译并运行程序,输出结果如下:

正向遍历:

倚天剑,屠龙刀,断肠草,葵花宝典,四十二章经,

-----------------------------

逆向遍历:

四十二章经,葵花宝典,断肠草,屠龙刀,倚天剑,

       如果需要增加一个新的具体聚合类,如客户数据集合类,并且需要为客户数据集合类提供不同于商品数据集合类的正向遍历和逆向遍历操作,只需增加一个新的聚合子类和一个新的具体迭代器类即可,原有类库代码无须修改,符合“开闭原则”;如果需要为ProductList类更换一个迭代器,只需要增加一个新的具体迭代器类作为抽象迭代器类的子类,重新实现遍历方法,原有迭代器代码无须修改,也符合“开闭原则”;但是如果要在迭代器中增加新的方法,则需要修改抽象迭代器源代码,这将违背“开闭原则”。

【作者:刘伟   http://blog.csdn.net/lovelion


Recommend

  • 53

    标准操作 for循环 相信大部分搬砖工作者都写过类似的代码: var arr = ['element1', 'element2', 'element3']; for (var i = 0, len = arr.length; i < l

  • 46

    前言 JavaScript 遍历、枚举与迭代的骚操作(上篇)总结了一些常用对象的遍历方法,大部分情况下是可以满足工作需求的。但下篇介绍的内容,在工作中95%的情况下是用不到的,仅限装逼。俗话说:装得逼多必翻车!若本文有翻车现场,请轻喷。 ES6 迭代器(it

  • 21

    ARTS ARTS 是陈浩(网名左耳朵耗子)在极客时间专栏里发起的一个活动,目的是通过分享的方式来坚持学习。 每人每周写一个 ARTS:Algorithm 是一道算法题,Review 是读一篇英文文章,Technique/Tips 是分享一个小技术...

  • 10

    遍历聚合对象中的元素——迭代器模式(六) 6 迭代器模式总结

  • 9

    5 JDK内置迭代器        为了让开发人员能够更加方便地操作聚合对象,在Java、C#等编程语言中都提供了内置迭代器。在Java集合框架中,常用的List和Set等聚合类都继承(或实现)了java.util.Collection接口,在Collection接口中声明了如下方法(部分)...

  • 9

    4 使用内部类实现迭代器        在迭代器模式结构图中,我们可以看到具体迭代器类和具体聚合类之间存在双重关系,其中一个关系为关联关系,在具体迭代器中需要维持一个对具体聚合对象的引用,该关联关系的目的是访问存储在聚合对象中的数据,以便迭代...

  • 8

    2 迭代器模式概述        在软件开发中,我们经常需要使用聚合对象来存储一系列数据。聚合对象拥有两个职责:一是存储数据;二是遍历数据。从依赖性来看,前者是聚合对象的基本职责;而后者既是可变化的,又是可分...

  • 10

    遍历聚合对象中的元素——迭代器模式(一)        20世纪80年代,...

  • 4
    • knightyun.github.io 2 years ago
    • Cache

    JavaScript 深度迭代遍历未知对象

    JavaScript 深度迭代遍历未知对象 面向对象编程的语言,都存在对对象的一些操作,其中就包括遍历未知对象的属性值。 常见的遍历对象的方法: var o = {...

  • 5
    • codeshellme.github.io 2 years ago
    • Cache

    迭代器模式-统一集合的遍历方式

    公号:码农充电站pro 主页:https://codeshellme.github.io 今天来介绍迭代器模式(Iterator Design Patte...

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK