设计模式之Iterator模式

  • IteratorPattern在GoF的定义:提供一种方法访问一个容器(container)对象中各个元素,而又不需暴露该对象的内部细节。
  • 实现:遍历任何对象集合
  • 同时:降低类之间的耦合度,提高复用性
  • 相关Pattern: Visitor Pattern, Composite Pattern,Factory Method Pattern(有时会用到)
  • JDK中使用了Iterator pattern的类有:iterator
    以UML类图的形式,Iterator Pattern可表示为:(以Java为实现语言)
设计模式之Iterator模式
  • 通过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而言,就是纯粹的浪费了。

你可能感兴趣的:(设计模式,jdk,OO,UML)