- 浏览: 341299 次
- 性别:
- 来自: 广州
文章分类
最新评论
合成模式是对象的结构模式,有时又叫做部分-整体模式。
一个基于继承的类型的等级结构便是一个树结构,一个基于合成的对象结构也是一个树结构,本章将要介绍的合成模式也是一个处理对象的树结构的模式。
一:有向树结构的种类
(A)由上向下的树图---每一个树枝节点都有箭头指向它的所有的子节点,从而一个客户端要求一个树枝节点给出所有的子节点,而一个节点却不知道它的父节点。
(B)由下向上的树图---在一个由下向上的树图中,每一个节点都有箭头指向它的父节点,但是一个父节点却不知道其子节点。
(C)双向的树图
二:安全式和透明式的合成模式
合成模式涉及到三个角色:
(A)抽象构件(Component角色):这是一个抽象角色,它给参加组合的对象规定一个接口,这个接口给出共有的接口及其默认的行为
(B)树叶构件(Leaf)角色:代表参加组合的树叶对象
(C)树枝构件(Composite)角色:代表参加组合的有子对象的对象,并给出树枝构件对象的行为
合成模式根据所实现接口的区别分为两种形式,分别称为安全式和透明式。透明式在Component里面声明了所有的用来管理子类对象的方法,包括add(),remove和getChild方法,这样做的好处是所有的构件类都有相同的接口.安全式是在Composite类里面声明管理子类对象的方法.
三:下面是安全式的合成模式的源代码
四:下面是透明式的合成模式的源代码
与安全式的合成模式不同的是,透明式的合成模式要求所有的具体构件类,不论是树枝构件还是树叶构件,均符合一个固定的接口.角色和安全式的相同,代码如:
五:一个绘图的例子411
现给出一个绘图软件的例子,以说明合成模式的应用。一个绘系统给出各种工具用来描绘由线,长方形和圆形等基本图形组成的图形。显然,一个复合的图形既然是由这些基本图形组成的,那么全成模式就是一个合适的设计模式。下面给出安全合成模式的代码(透明式的自己写):
//长方形,圆形的实现和Line的一样
六:awt库中的例子
由于awt和swing的图形界面构件是建立在awt库中的Container类和Component类上的,Button和Checkbox是树叶型的构件,而Container则是树枝型的构件.在Container类中,有操作聚集的方法,而在Component类中则没有这样的方法,这就是说awt中使用的合成模式是安全形式的合成模式.
在下面的情况下应当考虑使用合成模式:
(1)需要描述对象的部分和整体的等级结构
(2)需要客户忽略个体构件和组合构件的区别.
优点:可以很容易地增加新种类的构件。
缺点:使用继承的方法来增加新的行为很困难
一个基于继承的类型的等级结构便是一个树结构,一个基于合成的对象结构也是一个树结构,本章将要介绍的合成模式也是一个处理对象的树结构的模式。
一:有向树结构的种类
(A)由上向下的树图---每一个树枝节点都有箭头指向它的所有的子节点,从而一个客户端要求一个树枝节点给出所有的子节点,而一个节点却不知道它的父节点。
(B)由下向上的树图---在一个由下向上的树图中,每一个节点都有箭头指向它的父节点,但是一个父节点却不知道其子节点。
(C)双向的树图
二:安全式和透明式的合成模式
合成模式涉及到三个角色:
(A)抽象构件(Component角色):这是一个抽象角色,它给参加组合的对象规定一个接口,这个接口给出共有的接口及其默认的行为
(B)树叶构件(Leaf)角色:代表参加组合的树叶对象
(C)树枝构件(Composite)角色:代表参加组合的有子对象的对象,并给出树枝构件对象的行为
合成模式根据所实现接口的区别分为两种形式,分别称为安全式和透明式。透明式在Component里面声明了所有的用来管理子类对象的方法,包括add(),remove和getChild方法,这样做的好处是所有的构件类都有相同的接口.安全式是在Composite类里面声明管理子类对象的方法.
三:下面是安全式的合成模式的源代码
package cai.milenfan.basic.test; public interface Component { //返回自己的实例 Component getComposite(); //某个商业方法 void sampleOperation(); }
package cai.milenfan.basic.test; import java.util.Enumeration; import java.util.Vector; public class Composite implements Component{ private Vector componentVector = new java.util.Vector(); public Component getComposite() { return this; } 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.remove(component); } public Enumeration components(){ return componentVector.elements(); } }
package cai.milenfan.basic.test; public class Leaf implements Component{ public Component getComposite() { //write you code here return null; } public void sampleOperation() { //write your code here } }
四:下面是透明式的合成模式的源代码
与安全式的合成模式不同的是,透明式的合成模式要求所有的具体构件类,不论是树枝构件还是树叶构件,均符合一个固定的接口.角色和安全式的相同,代码如:
package cai.milenfan.basic.test; import java.util.Enumeration; public interface Component { //返回自己的实例 Component getComposite(); //某个商业方法 void sampleOperation(); //聚集的管理方法,增加一个子构件对象 void add(Component component); //聚集的管理方法,删除一个子构件对象 void remove(Component component); //聚集的管理方法,返回聚集的Enumeration对象 Enumeration components(); }
package cai.milenfan.basic.test; import java.util.Enumeration; import java.util.Vector; //树枝构件角色实现了抽象构件角色所规定的所有接口,特别指出的是,树枝构件角色给出了管理聚集的所有方法 public class Composite implements Component{ private Vector componentVector = new java.util.Vector(); public Component getComposite() { return this; } 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.remove(component); } public Enumeration components(){ return componentVector.elements(); } }
package cai.milenfan.basic.test; import java.util.Enumeration; public class Leaf implements Component{ public Component getComposite() { //write you code here return null; } public void sampleOperation() { //write your code here } public void add(Component component) { } public Enumeration components() { return null; } public void remove(Component component) { } }
五:一个绘图的例子411
现给出一个绘图软件的例子,以说明合成模式的应用。一个绘系统给出各种工具用来描绘由线,长方形和圆形等基本图形组成的图形。显然,一个复合的图形既然是由这些基本图形组成的,那么全成模式就是一个合适的设计模式。下面给出安全合成模式的代码(透明式的自己写):
package cai.milenfan.basic.test; //这是一个抽象构件角色 public abstract class Graphics { public abstract void draw(); }
package cai.milenfan.basic.test; import java.util.Vector; public class Picture extends Graphics{ private Vector list = new Vector(10); public void draw() { for(int i=0;i<list.size();i ){ Graphics g = (Graphics)list.get(i); g.draw(); } } //管理聚集的方法,增加一个子构件对象 public void add(Graphics g){ list.add(g); } //删除一个子构件对象 public void remove(Graphics g){ list.remove(g); } //返回一个子构件对象 public Graphics getChild(int i){ return (Graphics)list.get(i); } }
package cai.milenfan.basic.test; //Line是一个树中构件,没有任何的子对象,因此不提供管理子对象聚集的方法 public class Line extends Graphics{ public void draw() { //write your code here } }
//长方形,圆形的实现和Line的一样
六:awt库中的例子
由于awt和swing的图形界面构件是建立在awt库中的Container类和Component类上的,Button和Checkbox是树叶型的构件,而Container则是树枝型的构件.在Container类中,有操作聚集的方法,而在Component类中则没有这样的方法,这就是说awt中使用的合成模式是安全形式的合成模式.
在下面的情况下应当考虑使用合成模式:
(1)需要描述对象的部分和整体的等级结构
(2)需要客户忽略个体构件和组合构件的区别.
优点:可以很容易地增加新种类的构件。
缺点:使用继承的方法来增加新的行为很困难
发表评论
-
Mina重连
2014-05-26 21:29 2927import com.sun.swing.internal. ... -
面试经典
2014-05-24 09:29 6431.mysql innodb引擎,什么叫聚集索引,与非聚集索 ... -
一拍网网站系统架构图
2014-03-28 21:24 623一拍网网站系统架构图 -
Window下安装配置nginx
2013-08-12 16:53 809安装:http://www.cnblogs.com/wen ... -
使用线程池的好处
2013-07-18 14:41 1252使用线程池有两个好处: 1.可以创建和销毁线程所带来的系统 ... -
Java ThreadLocal使用浅析
2013-07-18 14:36 483ThreadLocal通过在其内部保存变量的副本,并且各个副本 ... -
MyBatis学习之简单增删改查操作、MyBatis存储过程、MyBatis分页、MyBatis一对一、MyBatis一对多
2013-07-05 13:06 1177http://blog.csdn.net/zhangwei ... -
分享一位网友的架构杂谈
2013-05-20 23:16 913不容类型的网站,并发处理不一样,例如针对sns这种类型的网站 ... -
JSP页面静态化
2013-04-08 09:20 890http://www.java-zone.org/644.ht ... -
Java compile to C++
2013-03-19 14:53 507http://code.google.com/a/eclips ... -
几个TCP Socket的通信框架
2013-03-19 12:26 996http://www.oschina.net/p/simple ... -
宝贝鱼
2013-03-18 23:54 692http://code.google.com/p/cshbbr ... -
将Java程序注册成系统服务(NT服务)
2013-03-16 16:14 604http://blog.csdn.net/small____f ... -
Java内存回收机制
2013-03-13 15:47 814http://www.iteye.com/blogs/tag/ ... -
支付宝,百付宝集成
2013-03-13 14:01 975http://help.alipay.com/support/ ... -
SSH+EXTJS项目下载
2013-03-11 23:02 437http://download.csdn.net/tag/Ex ... -
Hibernate中使用Threadlocal创建线程安全的Session
2013-03-04 20:39 592http://blog.sina.com.cn/s/blog_ ... -
Java Socket多线程通信
2012-10-09 09:53 839当Server没接受到一个Client连接请求之后,都把处理流 ... -
Java 多线程的一个例子
2012-10-09 09:48 1024目录: 1 synchronized的 ... -
app引擎
2012-07-10 09:39 0http://sae.sina.com.cn/ htt ...
相关推荐
灰度色彩模式是RGB色域的一个子集,它基于红绿蓝三原色光的等量混合。在RGB模式下,每个颜色通道(R、G、B)都有256个级别,当这三个值相同时,就会形成一个灰度色,总共有256级灰度,包括纯黑(0,0,0)和纯白(255,...
#### 五、状态模式的优点 - 将与特定状态相关的行为局部化,并且将不同状态的行为分割开来。 - 允许状态转换逻辑与状态对象合成一体,而不是某一个巨大的条件分支语句块。 - 遵循开闭原则,可以在不修改Context的...
十五、建造者模式 建造者模式是一创建型模式,它将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式适用于创建复杂对象,其中对象的构建过程和表示应该相互独立。 十六、原型...
#### 十五、参考电路 SYN6288的数据手册提供了多种参考电路,包括不同电压供电模块、复位电路、状态指示电路、扬声器输出电路、外部晶振电路等,以帮助用户更好地进行设计。 #### 十六、发送合成文本的示例程序 - *...
《2023年A301型氨合成催化剂行业市场需求分析报告及未来五至十年行业预测报告》 本报告详尽地分析了A301型氨合成催化剂行业的市场现状,以及对未来五至十年的发展趋势进行了预测。A301型氨合成催化剂作为一种关键的...
#### 十五、解释器模式(Interpreter) **定义:** 解释器模式是一种行为型设计模式,它允许您定义语言的文法,并且建立一个解释器来解释该语言中的句子。 **应用场景:** 当需要解释的语句以一种简单的语言来表达...
#### 三、产品功能描述 - **语音合成技术**:采用先进的语音合成算法,能够实现高质量的中文语音合成效果。 - **多接口支持**:支持UART、SPI等多种通信接口,方便集成到不同的硬件平台。 - **自定义功能**:提供了...
合成模式 (Composite) - **定义**:将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。 - **应用场景**:处理层次结构中的对象,如文件系统、UI控件等。 - **...
合成模式是一种结构型设计模式,允许将对象组合成树形结构以表示部分-整体的层次结构,使得用户对单个对象和组合对象的使用具有一致性。 二十、装饰(Decorator)模式 装饰模式允许向一个现有的对象添加新的功能,...
这种偏重于理论的教学模式难以激发学生的学习兴趣和创新思维,无法有效提高学生分析和解决实际问题的能力。 ### 知识点四:音乐分析与合成实验的创新点 针对传统实验的不足,基于MATLAB的音乐分析与合成实验是一个...
此外,书中还详细介绍了外观模式、享元模式、代理模式、职责链模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式以及访问者模式等内容。通过阅读本书...
#### 三、与其他设计原则的关系 - **里氏代换原则**: 任何基类可以出现的地方,子类一定可以出现。 - **依赖倒转原则**: 依赖于抽象,而非具体实现。 - **合成/聚合复用原则**: 使用合成或聚合的方式复用代码,而...
- Alt+/:切换合成窗口的显示模式。 - Shift+0:切换合成窗口的显示比例为100%。 - Shift+9:切换合成窗口的显示比例为25%。 - Shift+8:切换合成窗口的显示比例为50%。 五、编辑快捷键 - Ctrl+Z:撤销上一步操作。...
#### 三、对象的适配器(Adapter)模式 **意图:** 与类的适配器模式类似,但使用对象组合而非继承来实现。 **应用场景:** - 当无法使用继承时。 - 当想要动态地决定所使用的适配器时。 **优点:** - 更加灵活。 - ...
宏观环境下的行业定位强调了合成肽疫苗在公共卫生策略中的重要地位,而"十三五"期间的显著业绩则证明了政策导向的有效性和行业的快速发展。 最后,关于产业发展前景,合成肽疫苗行业有望在未来继续保持高增长态势,...
●纵观全球三十年,运营转型是运营板块与业务和职能不断分工、进入到运营板块内的操作活动被不断优化的过程。从起步开始,海外银行运营转型经历三个阶段:“集中化’驱动的1.0到“精益化”驱动的2.0, 目前正在迈向...