C#设计模式-合成模式-案例分析

《C#26设计模式》之合成模式

 

1、合成模式简介

合成模式是基于对象的模式,我们也可以理解成整体-部分模式,将对象组装到树结构,就可以用来描述整体和部分作用。

 

2、合成模式结构

       从类图中可以看出合成模式涉及3个角色:

抽象构件角色(Component)这是一个抽象角色,他给参加组合的对象规定一个接口,这个角色给出共有的接口及其默认行为。

       树叶构件角色(Leaf)代表参加组合的树叶对象。一个树叶没有下级的子对象。定义出参加原始对象的行为。

  树枝构件角色(Composite):代表参加组合的有子对象的对象,并给出树枝构件对象的行为。

3、合成模式

安全和透明式的合成模式

 

 

透明方式:就是在Component里面声明所有的用来管理子对象的方法,包括add()、remove()以及getChild()方法,这样做的好处是所有的构件类都有相同的接口。在客户端看来,树叶类对象与合成类对象的区别起码在接口层次上消失了,客户端可以同等的对待所有的对象。这就是透明形式的合成模式。

        这个选择的缺点是不够安全的,因为树叶类对象和合成类对象在本质上是有区别的,树叶类对象不可能有一层的对象,因此add()、remove()以及getChild()方法没有意义,但是在编译时期不会出错,而只会在运行时期才会出错。

       

安全方式:是在Composite类里面声明所有的用来管理子类对象的方法。这样的做法是安全的做法,因为树叶类型的对象根本就没有管理子对象的方法。因此,如果客户端对树叶对象使用这些方法时会在编译时期出错。编译不通过,就不会出现运行时出错。

 

4、合成模式的应用:

首先创建抽象构建

 

创建树叶构件源代码如下:

创建树枝构件源代码如下:

客户端源代码如下:

显示结果:

如需案例源码,请留言邮件地址!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值