`
squirrelRao
  • 浏览: 66795 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

设计模式之Iterator模式

阅读更多
  • IteratorPattern在GoF的定义:提供一种方法访问一个容器(container)对象中各个元素,而又不需暴露该对象的内部细节。
  • 实现:遍历任何对象集合
  • 同时:降低类之间的耦合度,提高复用性
  • 相关Pattern: Visitor Pattern, Composite Pattern,Factory Method Pattern(有时会用到)
  • JDK中使用了Iterator pattern的类有:iterator
    以UML类图的形式,Iterator Pattern可表示为:(以Java为实现语言)
  • 通过Iterator,借助在ConcreteInterator中定义的实现,在遍历Entity对象组成的集合时达到了屏蔽ConcreateAggregate中具体实现的目的,自然就降低了类之间的耦合度,提高了复用率。不论ConcreteAggregate中Entity的集合是List或者是Vector,或是Entity[],对于外界调用者来说都没有任何影响。

          在Iterator pattern之上遍历集合对象时,调用实现变得十分通用:

         // ---code----
          ConcreteAggregate object = new ConcreteAggregate();
          Iterator iterator = object.createIterator();
          while(iterator.hasNext())
          {
                Object entity = iterator.next();
                 ........
           }
  •  Aggregate和Iterator类能不能改写成Interface而不使用Abstract Class ?

            Aggregate类不能改写为Interface,因为在Aggregate中实现了createIterator()方法,

            如果改写成Interface将不能在Aggregate中实现createIterator(),createIterator()的
            实现就必须放在ConcreteAggregate中,显然,这样做是十分多余而且是违背所谓的
            OO原则的。
           
            Iterator类不能改写为Interface的理由与Aggregate不能改写为Interface是一样的,
            Iterator中肩负着实现hashNext()的使命。
            
            当然,Iterator与Aggregate是有不同之处的,Iterator肩负的任务并没有Aggregate那样重,
            因为就方法hasNext()和next()所完成的业务而言,Iterator和ConcreteIterator之间是一致的。
            而方法CreateIterator()如果放在ConcreteAggregate而言,就是纯粹的浪费了。
  • 大小: 25.8 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics