`
javabkb
  • 浏览: 53704 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

设计模式之结构模式之合成模式

阅读更多
1,UML图
  


   安全式的合成模式
   抽象构件(Component)角色:这是一个抽象角色,它给参加组合的对象定义出公共出的接口及其默认行为,可以用来管理所有的子对象。合成对象通常把它所包含的子对象当做类型为Component的对象。在安全的合成模式里,构件角色并不定义出管理子对象的方法,这一定义由树枝构件对象给出。
   树叶构件(Leaf)角色:树叶对象是没有下级子对象的对象,定义出参加组合的原始对象的行为。
   树枝构件(Composite)角色:代表参加组合的有下级子对象的对象。树枝构件类给出所有的管理的子对象的方法,如add()、remove()以及components()的声明。



   透明式的合成模式
   抽象构件(Component)角色:这是一个抽象角色,它给参加组合的对象规定一个接口,规范共有的接口及默认行为。这个接口可以用来管理所有的子对象,要提供一个接口以规范取得和管理下层组件的接口,包括add()、remove()以及getChild()之类的方法。
   树叶构件(Leaf)角色:代表参加组合的树叶对象,定义出参加组合的原始对象行为。树叶类会给出add()、remove()以及getChild()之类的用来管理子类对象的方法的平庸实现。
   树枝构件(Composite)角色:代表参加组合的有子对象的对象,定义出这样的对象的行为。

  
2, 模式说明

   合成模式的实现根据所实现接口的区别分为两种形式,分别称为安全式和透明式。合成模式可以不提供父
   对象的管理方法,但是合成模式必须在合适的地方提供子对象的管理方法。在什么地方声明子对象的管理
   方法,诸如add()、remove()以及getChild()等就变成了一个值得仔细思考的问题。
   对于透明方式: 在Component里面声明所有的用来管理子对象的方法、包括add()、remove(),以及getChild()
   方法。这样做的好处是所有的构件类都有相同的接口。在客户端看来,树叶类对象与合成类对象的区别起码
   在接口层次上消失了,客户端可以同等地对待所有的对象。这个选择的缺点是不够安全,因为树叶类对象和
   合成类对象在本质上是有区别的。树叶类对象不可能有下一层次的对象,因此add()、remove()以及getChild()
   方法没有意义,但是在编译时期不会出错,而只会在运行时期才会出错。
   对于安全方式:在Composite类里面声明所有的用来管理子类对象的方法。这样的做法是安全的做法,因为树叶
   类型的对象根本就没有管理子类对象的方法,因此,如果客户端对树叶对象使用这些方法时,程序会在编译
   时期出错。编译通不过,就不会出现运行时期错误。这个选择的缺点是不够透明,因为树叶类和合成类将具
   有不同的接口。

3,模式示例代码

  
     package com.maohao.struct.composite;

     public interface Component {

	Composite getComposite();	
	void sampleOperation();
     }
   


  
     package com.maohao.struct.composite;

     import java.util.Enumeration;
     import java.util.Vector;

     public class Composite implements Component {

	private Vector componentVector = new Vector();
	
	@Override
	public Composite getComposite() {

		return this;
	}

	@Override
	public void sampleOperation() {

		Enumeration enumeration = components();
		while(enumeration.hasMoreElements()) {		
			((Component)enumeration.nextElement()).sampleOperation();
		}
	}
	
	public void add(Component component) {
		
		componentVector.addElement(component);
	}
	
	public void remove(Component component) {
		
		componentVector.removeElement(component);
	}
	
	public Enumeration components() {
		
		return componentVector.elements();
	}
     }
   

    
  
     package com.maohao.struct.composite;

     public class Leaf implements Component {

	@Override
	public Composite getComposite() {

		return null;
	}

	@Override
	public void sampleOperation() {

	}

     }
   


  
      package com.maohao.struct.composite;

      import java.util.Enumeration;

      public interface Component2 {

	Composite2 getComposite2();
	void sampleOperation();
	void add(Component2 component);
	void remove(Component2 component);
	Enumeration components();
      }
   


  
      package com.maohao.struct.composite;

      import java.util.Enumeration;
      import java.util.Vector;

      public class Composite2 implements Component2 {

	private Vector componentVector = new Vector();
	
	@Override
	public Composite2 getComposite2() {

		return this;
	}

	@Override
	public void sampleOperation() {

		Enumeration enumeration = components();
		while(enumeration.hasMoreElements()) {		
			((Component2)enumeration.nextElement()).sampleOperation();
		}
	}
	
	@Override
	public void add(Component2 component) {
		
		componentVector.addElement(component);
	}
	
	@Override
	public void remove(Component2 component) {
		
		componentVector.removeElement(component);
	}
	
	@Override
	public Enumeration components() {
		
		return componentVector.elements();
	}
     }
   


  
     package com.maohao.struct.composite;

     public class Leaf2 implements Component {

	@Override
	public Composite getComposite() {

		return null;
	}

	@Override
	public void sampleOperation() {

	}
     }
   


4,与其他模式比较
     
    与命令模式的关系:合成模式常常可以应用到命令类的合成上,由几个具体命令类合成宏命令类。

   

  
     
  • 大小: 38.5 KB
  • 大小: 31.4 KB
分享到:
评论

相关推荐

    C#设计模式.PDF

    五、 透明式的合成模式结构 93 六、 透明式的合成模式实现 94 七、 使用合成模式时考虑的几个问题 97 八、 和尚的故事 98 九、 一个实际应用Composite模式的例子 98 C#设计模式(12)-Decorator Pattern 101 一、 ...

    尚硅谷设计模式源码笔记课件.zip

    1) 内容包括: 设计模式七大原则(单一职责、接口隔离、依赖倒转、里氏替换、开闭原则、迪米特法则、合成复用)、UML类图(类的依赖、泛化和实现、类的关联、聚合和组合) 23种设计模式包括:创建型模式:单例模式(8种...

    C#设计模式结构型

    C#设计模式-结构型相关课件 合成模式(Composite) • 设计方案一: 合成模式(Composite) • 设计方案二 合成模式(Composite) • 设计方案一和设计方案二的区别 – 设计方案二使得客户端更不需要关心所需处理的...

    C#设计模式大全

    五、 透明式的合成模式结构 六、 透明式的合成模式实现 七、 使用合成模式时考虑的几个问题 八、 和尚的故事 九、 一个实际应用Composite模式的例子 C#设计模式(12)-Decorator Pattern 一、 装饰...

    《设计模式实训教程》【PPT+类图与代码+样章】

    3.1.1设计模式 3.1.2创建型模式概述 3.1.3简单工厂模式 3.1.4工厂方法模式 3.1.5抽象工厂模式 3.1.6建造者模式 3.1.7原型模式 3.1.8单例模式 3.2实训实例 3.2.1简单工厂模式实例之图形工厂 3.2.2工厂方法...

    24种设计模式介绍与6大设计原则

    总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元...

    Java 设计模式

    java的设计模式大体上分为三大类: 创建型模式(5种):工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模式。 结构型模式(7种):适配器模式,装饰器模式,代理模式,外观模式,桥接模式,组合模式,享元...

    C#23种设计模式_示例源代码及PDF

    合成模式:合成模式将对象组织到树结构中,可以用来描述整体与部分的关系。合成模式就 合成模式 是一个处理对象的树结构的模式。 合成模式把部分与整体的关系用树结构表示出来。 合成模 式使得客户端把一个个单独的...

    设计模式Demo

    针对23种设计模式,分别写了demo并画了类图帮助理解。 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰...

    设计模式所有实验及实验报告及代码.zip

    软件设计模式概述 2GoF 的 23 种设计模式 3UML中的类图及类图之间的关系 4开闭原则 5里氏替换原则 6依赖倒置原则 7单一职责原则 8接口隔离原则 9迪米特法则 10合成复用原则 11创建型模式的特点和分类 12单例模式 13...

    设计模式,软件开发者必读

    设计模式的个人总结教材,适合IT专业人士研究,目录如下: 序言 概念 6 1.1 设计模式的定义 6 1.2 设计模式的作用 6 1.3 设计模式的由来 6 1.4 设计模式的分类 7 1.5 OO设计七原则 7 1.5.1 开-闭原则(OPEN-CLOSED ...

    java和设计模式ppt教程

    java和设计模式ppt包含工厂模式、建造模式、原始模型模式、单例模式、结构模式、适配器、桥梁模式、合成模式、装饰模式、门面模式、享元模式、代理模式、行为模式、解释器模式、迭代子模式、调停者模式、备忘录模式...

    《Java设计模式(第2版)》

    二、设计模式遵循的原则有6个: 1、开闭原则(Open Close Principle) 对扩展开放,对修改关闭。 2、里氏代换原则(Liskov Substitution Principle) 只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,...

    Delphi模式编程第一分卷

    11.3.1 合成模式在组织机构管理系统中的应用 11.3.2 范例小结 第12章 装饰者模式(Decorator) 12.1 模式解说 12.2 结构和用法 12.2.1 模式结构 12.2.2 代码模板 12.2.3 问题讨论 12.3 范例与实践 12.3.1 ...

    CompositePattern:复合设计模式示例

    这种设计模式属于结构模式,因为该模式创建了一组对象的树形结构。 此模式创建一个包含其自己的对象组的类。 此类提供了修改其相同对象组的方法。 我们通过以下示例演示复合模式的使用,在该示例中我们将显示组织的...

    Delphi模式编程第二分卷

    11.3.1 合成模式在组织机构管理系统中的应用 11.3.2 范例小结 第12章 装饰者模式(Decorator) 12.1 模式解说 12.2 结构和用法 12.2.1 模式结构 12.2.2 代码模板 12.2.3 问题讨论 12.3 范例与实践 ...

    吉林大学软件学院卓班设计模式第二次作业

    请继续对3中的类,使用桥接模式重新设计,部分类图如下;同时指出如何适应a-e的变化需求. 5. 现有Menu类及相关类,如下图 在显示AppleMenu和WindowMenu时,是以图片的形式显示的;对于ConsoleMenu当然也以图片...

    JAVA常用设计模式

    分类 创建模式 工厂模式;建造模式;原始模型模式;单例模式 结构模式 适配器;桥梁模式;合成模式;装饰模式;门面模式;享元模式;代理模式 行为模式 优点 面向界面编程 降低耦合性 增加灵活性

    浅析java常用的设计模式(doc-23页).doc

    浅析java常用的设计模式(doc 23页) 1、工厂模式:客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即 可。消费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修 改。如:如何...

Global site tag (gtag.js) - Google Analytics