设计模式九之迭代器与组合模式

  管理良好的集合。有许多种方法可以把对象堆起来成为一个集合。比如,数组、堆栈、列表或者是散列表中。有时候可以不用让客户看到我们的实现,怎么让客户遍历对象而又无法窥视你存储对象的方式,可以学习创建一些对象超集合。

  我们可以对遍历封装,那么这就是迭代器模式,依赖一个名为迭代器的接口。如JAVA中就提供了得Iterator.集合,有时候也被成为聚合(aggregate)。

  可以多态地处理任何项的集合。

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

  迭代器模式给我们提供了一种方法,可以顺序访问一个聚集对象中的元素,而又不知道内部是如何表示的。在设计中使用迭代器的影响是明显的:如果你又一个统一的方法访问聚合中得每一个对象,就 可以编写多态的代码和这些聚合搭配,使用一些printMenu方法,只要有了迭代器这个方法根本不管菜单项究竟是由数组还是由ArrayList来保存的。

  迭代器模式把在元素之间游走的责任交给迭代器,而不是聚合对象,这不仅让聚合的接口和实现变得更简洁,也可以让聚合更专注在它所应该专注的事情上面(也就是管理对象集合),而不必去理会遍历的事情。

  单一责任,类的每个责任都有改变的潜在区域。超过一个责任,意味着超过一个改变的区域。这个原则告诉我们,尽量让每个类保持单一责任。

  内聚,用来度量一个类或模块紧密地达到单一目的或责任。

  当一个模块或一个类被设计出只致辞一组相关的功能时,我们说它具有高内聚;反之,当被设计成致辞一组不想关的功能时,我们说它具有低内聚。

  时候到了,就必须重构我们的代码,使它能够成长。如果不这么做,就会导致僵化和没有弹性的代码,完全看不到萌发新生命的希望。

----------

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

  让我们以菜单为例思考这一切:这个模式能够创建一个树形结构,在同一个结构中处理嵌套惨淡和菜单项组。通过将菜单和项放在相同的结构中,我们创建了一个整体/部分层次结构,即由菜单和菜单项组成的对象树。但是可以将它视为一个整体,像是一个丰富的大菜单。如果我们有了一个树形结构的菜单、子菜单和可能还带有菜单项的子菜单,那么任何一个菜单都是一种组合。因为它既可以包含其他菜单,也可以包含菜单项。个别对象只是菜单项--并未持有其他对象。

posted @ 2015-12-12 11:21  likeshu  阅读(134)  评论(0编辑  收藏  举报