现在的位置: 首页 > 综合 > 正文

设计模式学习(十三)迭代器模式-中介者模式

2011年11月15日 ⁄ 综合 ⁄ 共 977字 ⁄ 字号 评论关闭

迭代器模式

迭代器模式允许使用一个标准的接口顺序访问一个数据列表或集合,而又不需要知道数据的内部表示细节。另外,可以定义专用迭代器,让他完成一些特殊操作并且只返回数据集合中的特定元素。

迭代器模式的效果:

1 数据修改

 迭代器中最重要的问题是,遍历数据的同时数据者昂在被修改。如果读者的代码搜索范围较宽,只是偶尔才移向下一个元素,就有可能在访问集合的同时,底层集合正在添加或删除元素,也可能有另一个线程改变了集合。对这一问题没有简单的解决方案。如果读者想使用迭代器顺序访问一些列数据并删除特定的项目,要当心这种操作的后果。添加或删除一个元素意味着可能会遗漏掉某一元素或对同一元素访问了两次,这和读者所用的存储机制有关。

2 特权访问

 迭代器需要对基本容器类的底层数据结构具有特殊访问权限,这样才能访问数据。如果数据存储在一个ArrayList或Hashtable中,这很容易做到,但如果是存储在一个类里的其他集合结构里,就只能通过get操作使用该结构。另一种方法是,让迭代器成为容器类的一个派生类,直接访问其中的数据。

3 外部迭代器与内部迭代器

 “Design Pattems”中描述了两种迭代器:外部的和内部的。迄今为止,只介绍了外部迭代器。内部迭代器是能顺序访问整个集合的一些方法,不需要用户发出任何明确的请求就能直接对每个元素进行操作。这在c#中比较少见,但可以将这些方法设想成,规范一个集合中的数据值,使之处于0到1的范围,或者将字符串中的所有字符转换成特定格式。总的来说,外部迭代器给读者更多的控制权,因为调用程序可直接访问每个元素,并能决定是否对元素执行操作。

中介者模式

中介者作为唯一知道其他类中方法细节的一个类,在类发生变化时通知中介者,中介者在将这些变化传递给其他需要通知的类

中介者模式的效果:

1 当一个类的动作要受另一个类的状态影响时,中介者模式可以防止这些类变得混乱

2 使用中介者很容易修改一个程序的行为。

3 可以添加新的控件或类,除了改变中介者外,不用改动任何部分。

4 中介者解决了每个command对象要对用户接口中的其他对象和方法了解太多的问题

5 中介者变成了一个万能类,知道太多其他部分程序的信息,这会使他难以修改和维护。

6 每个中介者都是一个指定的类,要拥有的每个同事要调用方法,并知道每个同事有哪些可用的方法,这使得在不同项目中重用中介者变得很困难。

抱歉!评论已关闭.