设计形式——迭代器模式和组合模式(关于该模式的讨论)
设计模式——迭代器模式和组合模式(关于该模式的讨论)
实例代码|说明|类图,将这些结合起来理解!
设计模式(行为)——组合模式
可能有一群鸭子,都实现的接口Quackable,这里用组合模式,管理他们的动作。这就符合部分和整体的要求。
public class Flock implements Quackable { ArrayList quackers = new ArrayList(); public void add(Quackable quacker) { quackers.add(quacker); } public void quack() { # 这里用到了迭代器模式 Iterator iterator = quackers.iterator(); while (iterator.hasNext()) { Quackable quacker = (Quackable)iterator.next(); quacker.quack(); } } public String toString() { return "Flock of Quackers"; } } # 这里使用Flock(集合类),这里要注意叶子节点和组合,ADD集合的时候,这里用到了递归调用 public class DuckSimulator { public static void main(String[] args) { DuckSimulator simulator = new DuckSimulator(); AbstractDuckFactory duckFactory = new CountingDuckFactory(); simulator.simulate(duckFactory); } void simulate(AbstractDuckFactory duckFactory) { Quackable redheadDuck = duckFactory.createRedheadDuck(); Quackable duckCall = duckFactory.createDuckCall(); Quackable rubberDuck = duckFactory.createRubberDuck(); Quackable gooseDuck = new GooseAdapter(new Goose()); System.out.println("\nDuck Simulator: With Composite - Flocks"); Flock flockOfDucks = new Flock(); flockOfDucks.add(redheadDuck); flockOfDucks.add(duckCall); flockOfDucks.add(rubberDuck); flockOfDucks.add(gooseDuck); Flock flockOfMallards = new Flock(); Quackable mallardOne = duckFactory.createMallardDuck(); Quackable mallardTwo = duckFactory.createMallardDuck(); Quackable mallardThree = duckFactory.createMallardDuck(); Quackable mallardFour = duckFactory.createMallardDuck(); flockOfMallards.add(mallardOne); flockOfMallards.add(mallardTwo); flockOfMallards.add(mallardThree); flockOfMallards.add(mallardFour); flockOfDucks.add(flockOfMallards); System.out.println("\nDuck Simulator: Whole Flock Simulation"); simulate(flockOfDucks); System.out.println("\nDuck Simulator: Mallard Flock Simulation"); simulate(flockOfMallards); System.out.println("\nThe ducks quacked " + QuackCounter.getQuacks() + " times"); } void simulate(Quackable duck) { duck.quack(); } }
名称 | Composite |
结构 | |
意图 | 将对象组合成树形结构以表示“部分-整体”的层次结构。C o m p o s i t e 使得用户对单个对象和组合对象的使用具有一致性。 |
适用性 |
|
设计模式(行为)——迭代器模式
设计原则:一个类应该只有一个引用变量的原因。
名称 | Iterator |
结构 | |
意图 | 提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示。 |
适用性 |
|
1 楼
nba520pz
2009-01-24
这个好像是一本书上的!
2 楼
jerry
2009-02-19
能不能说明一下,如果不用迭代器模式,让每个类都继承Iterator接口,而不是吐出一个实现方式,然后在使用时用多态的方式生成循环,这样也可以实现方法通行,这有什么区别吗?