迭代器和组合模式

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

类图关系:

          

二、组合模式:允许你将对象组合成树形结构来表现"整体/部分"层次结构,组合能让客户以一致处理的方式处理个别对象以及对象的组合。

组合模式让我们能用树形方式创建对象的结构,树里面包含了组合和个别对象,使用组合我们应用相同的操作在组合和个别对象身上。及大多数情况下,可忽略组合和个别对象的差距。

类图:

            

时间: 2024-08-22 12:09:27

迭代器和组合模式的相关文章

设计模式(9.1)--迭代器与组合模式

缓存(caching): 当组合结构很复杂,或者遍历的代价太高,那么实现组合节点的缓存就很有帮助. (1) Java Collection Framework 指的是一群类的接口. 其中包括了 ArrayList, Vector , LinkedList , Stack ,和 PriorityQueue. 这些类都实现了java.util.Collection接口. (2) Collection接口中的一些方法: add()  , addAll()  , clear() , contains()

设计模式 3 —— 迭代器和组合模式

设计模式目录: 设计模式 1 ——观察者模式 设计模式 2 —— 装饰者模式 设计模式 3 —— 迭代器和组合模式 概要 设计模式 3 -- 迭代器和组合模式

迭代器与组合模式

迭代模式与组合模式要点: 1.迭代器允许访问聚合的元素,而不需要暴露它的内部结构 2.迭代器将遍历聚合的工作封装进一个对象中 3.当使用迭代器的时候,我们一来聚合提供遍历 4.迭代器提供了一个通用的接口,让我们遍历聚合的项时,就可以使用多态机制 5.我们应该努力让一个类只分配一个责任 6.组合模式提供一个结构,可同时包容个别对象和组合对象 7.组合模式允许客户对个别对象以及组合对象一视同仁 8.组合结构内的任意对象称为组件,组件可以使组合,也可以是叶子节点 9.在实现组合模式时,有许多设计上的折

设计模式(9)--迭代器与组合模式

(1)散列表(hashtable)         共迭代器获取 hashtable.values().iterator();  因为每一笔数据都是由键值对组成. (2)迭代器是用来遍历集合的. Java5后集合都出了自己的遍历方式 如增加for循环.           遍历 也称 游走... (3)数组:Array 长定固定   集合:ArrayList 可扩展,取数据不需要转型 (4)Java中有自己的迭代器接口.在java.util.Iterator  . (5)集合:collectio

headFirst学习笔记之九:迭代器与组合模式(5.1)

1.任务: 大新闻!对象村餐厅和对象村煎饼屋合并了!可以在同一个地方吃早饭和午饭了hohoho(有什么好开森的对象村的小伙伴们好容易满足). 但是有一个问题出现了:煎饼屋的菜单menu是用ArrayList记录菜单项menuItem,但是餐厅的菜单menu使用数组Array记录menuItem.大家都不愿意修改自己的结构,那么java女招待的任务就很繁重了啊,因为取出菜单项的方法就要记住两种了:menuItems.get(i)和menuItems[i]. 1 public class MenuI

设计模式之迭代器与组合模式(四)

因为这系列篇幅较长,所以在这里也不进行任何铺垫,直奔主题去啦. 利用组合设计菜单 我们要如何在菜单上应用组合模式呢?一开始,我们需要创建一个组件接口来作为菜单和菜单项的共同接口,让我们能够用统一的做法来处理菜单和菜单项.换句话说,我们可以针对菜单或菜单项调用相同的方法. 让我们从头来看看如何让菜单能够符合组合模式的结构: 实现菜单组件 好了,我们开始编写菜单组件的抽象类:请记住,菜单组件的角色是为叶节点和组合节点提供一个共同的接口. public abstract class MenuCompo

迭代器模式和组合模式混用

迭代器模式和组合模式混用 前言 园子里说设计模式的文章算得上是海量了,所以本篇文章所用到的迭代器设计模式和组合模式不提供原理解析,有兴趣的朋友可以到一些前辈的设计模式文章上学学,很多很有意思的.在Head First 设计模式这本书中,也有说迭代和组合模式混用的方法,但是使用的语言是JAVA,实现起来比起C#差异还是不少.本人在做几个C#小项目的时候需要用到树形结构,也看到了Head First 设计模式中混用迭代器和组合模式的例子,觉得如果能用C#实现,以后无疑会带来很大的帮助.下面就记录下实

设计模式之组合模式(Composite Pattern)

一.什么是组合模式? 组合模式提供了一种层级结构,并允许我们忽略对象与对象集合之间的差别 调用者并不知道手里的东西是一个对象还是一组对象,不过没关系,在组合模式中,调用者本来就不需要知道这些 二.举个例子 假设我们要去描述文件系统,文件系统里有文件和文件夹,文件夹里又有文件夹和文件... 没错,这是一个层级结构,就像菜单一样,菜单里有菜单项和子菜单,子菜单里有菜单项和子子菜单.. 层级结构也就是树形结构,我们很容易想到定义一个Node类,包含一组指向孩子的指针,以此构造一颗完整的树 那么我们的类

Head First设计模式——组合模式

最近比较忙,有段时间没有更新设计模式的进度了.今天继续学习组合设计模式. 组合模式的例子我们继续延续上篇<Head First设计模式--迭代器模式>的菜单例子,首先声明下迭代器和组合模式没有什么关系,他们是两个不同模式.只是我们在这个菜单例子的组合模式内部会用到迭代器. 迭代器模式中说到两个餐馆合并然后使用迭代器进行统一处理菜单的打印,但是现在有一个新的需求是原来大菜单中我们希望加入子菜单,比如饭后甜点.那么这个时候对于需求模型来说就是类似下面这样 菜单拥有菜单项,菜单项中可能还拥有子菜单,