`

常用设计模式----迭代器与组合模式

 
阅读更多
package org.design.patterns;

import java.util.ArrayList;
import java.util.List;

/**
 *迭代器模式:
 *提供一种方法顺序访问一个聚合对象中的各个元素,而不暴露其内部的表示。 
 *
 */

//下面以java.uitil.Iterator为例进行说明
public interface Iterator<E> {
    boolean hasNext();
    E next();
    void remove();
}

/*
 * 以下是java.util.AbstractList,其中有对Iterator的实现,java的集合类中还有很多类似的实现,这里不再一一举例
*/
abstract class AbstractList<E> extends AbstractCollection<E> implements List<E> {
 protected AbstractList() {
 }
 public boolean add(E e) {
  add(size(), e);
  return true;
 }
 abstract public E get(int index);
 public E set(int index, E element) {
  throw new UnsupportedOperationException();
 }
 public void add(int index, E element) {
  throw new UnsupportedOperationException();
 }
 public E remove(int index) {
  throw new UnsupportedOperationException();
 }
 
 ......
 
 // Iterators
 public Iterator<E> iterator() {
  return new Itr();
 }
 
 private class Itr implements Iterator<E> {
  int cursor = 0;

  int lastRet = -1;
  int expectedModCount = modCount;

  public boolean hasNext() {
   return cursor != size();
  }

  public E next() {
   checkForComodification();
   try {
    E next = get(cursor);
    lastRet = cursor++;
    return next;
   } catch (IndexOutOfBoundsException e) {
    checkForComodification();
    throw new NoSuchElementException();
   }
  }

  public void remove() {
   if (lastRet == -1)
    throw new IllegalStateException();
   checkForComodification();

   try {
    AbstractList.this.remove(lastRet);
    if (lastRet < cursor)
     cursor--;
    lastRet = -1;
    expectedModCount = modCount;
   } catch (IndexOutOfBoundsException e) {
    throw new ConcurrentModificationException();
   }
  }

  final void checkForComodification() {
   if (modCount != expectedModCount)
    throw new ConcurrentModificationException();
  }
 }
 ......
}
*/

//====================================================================
 /**
  *组合模式:
  *允许将对象组合成树形结构类表现"整体/部分"层次结构。
  *组合能让客户以一致的方式处理个别对象以及对象组合 ,
  *"忽略"单个对象和组合对象的差别。
  *
  */
//顶层抽象类
abstract class Component{
 abstract void operation();
 
 void add(Component component){
  throw new UnsupportedOperationException();
 }
 void remove(Component component){
  throw new UnsupportedOperationException();
 }
 Component getChild(int i){
  throw new UnsupportedOperationException();
 }
 
}
//个体实现
class Leaf extends Component{
 @Override
 void operation() {
        System.out.println("Leaf.operation()");  
 }
}
//组合实现
class Composite extends Component{
    List<Component> comList;
    public Composite() {
      comList=new ArrayList<Component>();
    }
    
 @Override
 void add(Component component) {
       comList.add(component);
 }
 @Override
 void remove(Component component) {
      comList.remove(component);
 }
 @Override
 Component getChild(int i) {
  return comList.get(i);
 }
 
 @Override
 void operation() {
  System.out.println("Composite.operation()");
//         for(Component com:comList){
//          com.operation();
//         }  
  //用迭代器的方式(该迭代器是java.util的)
  java.util.Iterator<Component>  iterator = comList.iterator();
  while(iterator.hasNext()){
   Component component=iterator.next();
   component.operation();
  }
 }
}
//这样,Leaf和Composite都是Component对象,具有相同的接口
//菜单Menu和菜单项MenuItem是使用组合很好的例子
//=========================================================
/*
 *相关模式比较:
 * 策略:          封装可互换的行为(算法),并使用委托决定使用哪一个
 * 
 * 适配器:     改变一个或多个类的接口
 * 
 * 迭代器:     提供一个方式遍历集合,而无须暴露集合的实现
 * 
 * 外观:          简化一群类的接口
 * 
 * 组合:          客户可以将对象的集合以及个别的对象一视同仁
 * 
 * 观察者:     当某个状态改变时,允许一群对象被通知到  
 */
分享到:
评论

相关推荐

    JAVA常用设计模式-追美眉技术详解.doc

    ### Java常用设计模式—追美眉技术详解 #### 设计模式概述 设计模式是一种软件设计中的通用解决方案,它描述了一类问题以及解决该问题的方法。通过应用这些模式,开发人员可以编写出更易于理解、扩展和维护的代码...

    GOF-设计模式-Design Patterns-英文原版-高清-有目录-有页码

    本书还附带了一些基础类库的介绍,例如列表(List)、迭代器(Iterator)、列表迭代器(ListIterator)、点(Point)、矩形(Rect)等,这些都是在实现设计模式时常用的数据结构。 #### 十一、参考文献与索引 **参考文献与...

    java常用23中设计模式

    结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、...

    【资源免费下载】Java代码积累丨大话设计模式(Java实现版本)、线程协作

    组合模式 装饰模式 外观模式 享元模式 代理模式 行为模式(类行为模式) 解释器模式 模板方法模式 行为模式(对象行为模式) 策略模式 观察者模式 状态模式 导入模式 迭代器模式 命令模式 职责链模式 进来者模式 ...

    android常用设计模式

    Android 设计模式系列还包括工厂方法模式、抽象工厂模式、创建者模式、原型模式、单例模式、适配器模式、桥模式、组合模式、装饰模式、外观模式、享元模式、代理模式、解释器模式、模板方法模式、职责链模式、命令...

    .NET 23种常用设计模式

    ### .NET 23种常用设计模式 #### 概述 设计模式是在软件工程领域内被广泛采用的一种软件设计思路,旨在解决特定类型的问题。在.NET框架中,这些设计模式同样适用并能帮助开发者构建更加灵活、可扩展及易于维护的...

    java的设计模式 《设计模式-java语言中的应用.pdf》

    设计模式是软件工程中的一种最佳实践,它是在特定上下文中解决常见问题的模板或蓝图。在Java编程中,设计模式的应用极大地提高了代码的可读性、可维护性和可复用性。《设计模式——Java语言中的应用》这本书深入探讨...

    JAVA23个常用设计模式(ppt下载)

    3. **行为型设计模式**:涉及职责链模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式和访问者模式。职责链模式让多个对象有机会处理请求,避免请求...

    几种常用的设计模式介绍总结

    单例模式是一种常用的创建型设计模式,它保证一个类仅有一个实例,并提供一个全局访问点。单例模式通常用于控制资源的共享访问,例如数据库连接池、日志管理器等。 #### 实现方式 - **构造函数私有化**:防止外部...

    java几种常用的设计模式源码和心得

    本资源包含了2016年6月20日关于Java常用设计模式的源码和作者的心得体会,这对于我们深入理解和应用这些模式具有很大的帮助。 首先,我们要了解设计模式的基本分类。设计模式分为三大类:创建型模式(Creational ...

    几种常用的设计模式

    - 迭代器模式:允许你顺序访问聚合对象的元素,而无需暴露其底层表示。 - 中介者模式:定义一个对象来封装一系列对象之间的交互,降低耦合度。 - 备忘录模式:记录对象的状态,以便在需要时恢复。 - 观察者模式:...

    JAVA常用设计模式

    【Java常用设计模式详解】 设计模式是软件开发中的一种最佳实践,它提供了在特定场景下解决常见问题的模板。在Java中,设计模式分为三大类:创建型、结构型和行为型模式。以下是对这些模式的详细解释: 1. 创建型...

    设计模式期末试题下载

    根据给定文件的信息,我们可以提炼出关于设计模式的相关知识点,包括设计模式的概念、目标、特点以及常见的设计模式分类和具体应用。以下是对这些知识点的详细解释: ### 设计模式概念 1. **定义**:设计模式是...

    JAVA程序常用设计模式

    本资料包聚焦于“JAVA程序常用设计模式”,旨在帮助中高级JAVA程序员进一步提升编程能力。 1. 单例模式:确保一个类只有一个实例,并提供一个全局访问点。在Java中,单例模式通常通过双重检查锁定、静态内部类或...

    23种设计模式彩图-pdf高清版

    设计模式是软件工程中关于如何解决特定问题的一种公认方法或模板,它们是面向对象设计中常用且被广泛认可的解决方案。设计模式有助于重用设计、提升可维护性,同时减少开发过程中出现错误的可能。 本书中的23种设计...

    C++设计模式全总结-通俗易懂

    1. **Factory模式**:工厂模式是一种常用的创建型设计模式,其核心思想是定义一个用于创建对象的接口,但让子类决定实例化哪一个类。这种模式将对象的实例化延迟到子类进行。例如,在C++中,可以通过定义一个抽象...

    c++所有常用设计模式例子代码Source.zip

    "c++所有常用设计模式例子代码Source.zip"这个压缩包包含了C++实现的各种设计模式的实例代码,对于学习和理解设计模式有着极大的帮助。 设计模式通常分为三大类:创建型、结构型和行为型。下面,我们将详细讨论这些...

    【BAT必备】设计模式面试题

    常用的行为型模式有策略模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、状态模式、访问者模式、模板方法模式和解释器模式。 #### 三、常见设计模式面试题及解析 ##### 1. 单例模式 - **问题**...

    常用设计模式电子书和源码实例

    这个压缩包“常用设计模式电子书和源码实例”提供了深入理解和实践23种经典设计模式的宝贵资源,主要面向C#编程语言。下面我们将详细探讨这些设计模式以及它们在实际开发中的应用。 首先,设计模式可以分为三大类:...

Global site tag (gtag.js) - Google Analytics