`
zqjshiyingxiong
  • 浏览: 440234 次
  • 性别: Icon_minigender_1
  • 来自: 无锡
社区版块
存档分类
最新评论

设计模式——迭代器模式和组合模式(关于该模式的讨论)

    博客分类:
  • JAVA
阅读更多

实例代码|说明|类图,将这些结合起来理解!

设计模式(行为)——组合模式

可能有一群鸭子,都实现的接口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
结构
意图 提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示。
适用性
  • 访问一个聚合对象的内容而无需暴露它的内部表示。
  • 支持对聚合对象的多种遍历。
  • 为遍历不同的聚合结构提供一个统一的接口(即, 支持多态迭代)。

  • 大小: 14.8 KB
  • 大小: 7 KB
分享到:
评论
2 楼 jerry 2009-02-19  
能不能说明一下,如果不用迭代器模式,让每个类都继承Iterator接口,而不是吐出一个实现方式,然后在使用时用多态的方式生成循环,这样也可以实现方法通行,这有什么区别吗?
1 楼 nba520pz 2009-01-24  
这个好像是一本书上的!

相关推荐

    设计模式可复用面向对象软件的基础.zip

    5.4 ITERATOR(迭代器)—对象行为型 模式 171 5.5 MEDIATOR(中介者)—对象行为型 模式 181 5.6 MEMENTO(备忘录)—对象行为型 模式 188 5.7 OBSERVER(观察者)—对象行为型 模式 194 5.8 STATE(状态)—对象...

    X-gen PPT下载——《研磨设计模式》 实战

    包括责任链模式(Chain of Responsibility)、命令模式(Command)、解释器模式(Interpreter)、迭代器模式(Iterator)、中介者模式(Mediator)、备忘录模式(Memento)、观察者模式(Observer)、状态模式...

    设计模式C++版

    10. Iterator模式,迭代器模式,提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。 11. Interpreter模式,解释器模式,给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释...

    设计模式PDF

    这本书的核心理念是将实践中证明有效的解决方案——设计模式——以规范化的形式呈现出来,供开发者在遇到类似问题时参考和借鉴。设计模式是软件开发中的一种通用语言,它们代表了在特定情境下解决特定问题的最佳实践...

    设计模式 Head First

    #### 第9章:良好的集合管理——迭代器模式和组合模式 迭代器模式提供了一种方法来顺序访问聚合对象中的一系列数据,而不暴露其内部表示。组合模式则将对象组织到树形结构中以表示部分整体层次结构,使得客户端可以...

    设计模式可复用面向对象软件的基础

    - **行为型模式**:关注对象间的职责分配,例如策略模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、状态模式、访问者模式和解释器模式。 #### 设计模式的价值 设计模式之所以重要,是因为它们...

    HEAD_FIRST设计模式.zip

    Vlissides)经典设计模式,包括创建型模式(如单例模式、工厂模式、抽象工厂模式、建造者模式和原型模式)、结构型模式(如适配器模式、桥接模式、装饰器模式、组合模式、外观模式、享元模式和代理模式)以及行为型...

    设计模式 及 开发规范手册.zip

    这本书通过故事的方式解释了23种经典的GOF(Gang of Four)设计模式,包括创建型模式(如单例、工厂方法、抽象工厂、建造者、原型),结构型模式(如代理、装饰器、适配器、桥接、组合、外观、享元),以及行为型...

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

    - **邀请加入设计模式社区**:鼓励读者参与设计模式的研究和讨论。 - **结束语**:强调设计模式的重要性,并展望未来的发展趋势。 #### 九、术语表与指南 **术语表与指南:** 本书还提供了详细的术语表和指南,...

    设计模式之禅(第2版)

    定义迭代器模式的基本结构和目的。 - **20.3 迭代器模式的应用** 展示迭代器模式在实际项目中的应用场景。 - **20.4 最佳实践** 提供在实际开发中如何有效运用迭代器模式的建议。 **第21章 组合模式** - **...

    设计模式精解(GoF 23 种设计模式解析)

    ### 设计模式精解——GoF 23种设计模式解析 #### 0. 引言 设计模式作为面向对象编程的重要组成部分,在软件工程领域扮演着至关重要的角色。本文档旨在通过对GoF(Gang of Four)提出的23种设计模式进行深度解析,...

    23设计模式简讲

    - **模式定义**:迭代器模式是一种行为型设计模式,它提供一种方法来顺序访问集合对象中包含的各个元素,而又不暴露该对象的内部表示。 17. **MEDIATOR** - **场景解析**:在组织聚会时,如果需要协调各种活动...

    Design Pattern FrameworkTM

    为了帮助 .NET 开发者更好地理解和应用这些设计模式,《Head First 设计模式》为 .NET 2.0 特别推出了一个配套文档——《设计模式框架》(Design Pattern FrameworkTM),该文档涵盖了原书中介绍的所有设计模式,并...

    C#设计之道

    - **迭代器模式**:讨论迭代器模式的使用场景和实现方法。 #### 六、综合应用与思考 - **案例研究**:书中通过具体的案例研究,展示了如何将上述设计模式和其他设计理念结合起来,以应对复杂的软件设计挑战。 - **...

    think in patterns

    迭代器模式提供了一种方法来访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。 ##### 3.6 适配器模式 适配器模式将一个类的接口转换成客户希望的另一个接口。适配器让原本由于接口不兼容而不能一起...

    Head First Design Patterns

    - **行为型模式**:包括策略模式、模板方法模式、观察者模式、迭代器模式、访问者模式、命令模式、备忘录模式、状态模式、解释器模式等。这些模式侧重于对象间的交互方式。 #### 五、结语 《Head First Design ...

Global site tag (gtag.js) - Google Analytics