C#设计模式之合成模式介绍
Composite模式定义了单个对象和组合对象的类层次结构。(1)单个对象组合成复杂的组合对象,而多个组合对象又可以被组合成一个新的组合对象。其中,一个组合对象中的某些对象可能包容了其他对象。某些对象则表现单个基本对象,称为叶对象;某些对象代表一组对象,称为枝对象。叶对象可以组合成复杂的枝对象,而枝对象又可以被组合成新的枝对象,可以不断组合下去。
Composite模式使用户对单个对象和组合对象的使用具有一致性。客户可以一致地使用组合结构和单个对象,而不用关心处理的是一个叶节点还是一个组合组件。Composite关键是一个抽象类,这个类既可以代表一个对象,也可以代表一个容器来包含一组对象。(1)那么。Composite关键两个思想:
一、一个Composite对象既可包容Leaf对象,也可以其他包容Composite对象。
二、一个Leaf类和一个Composite共享一个在抽象类中定义的公共接口Component。(2)
在以下情况下考虑使用合成模式:
(1)表示对象的部分和整体层次结构
(2)忽略枝对象和叶对象的不同,用户同意使用组合结构的所有对象。
结构图如下:
合成模式的实现根据公共接口Component的区别分为两种形式,分别称为安全模式和透明模式。
透明模式:
公共接口Component中里面声明所有的用来管理子类对象的方法,包括Add()、Remove(),以及GetChild()方法。这样所有的叶对象和枝对象都有相同的接口,那么客户端可以将叶对象和枝对象同等对待而不用区分。
示例代码如下:






























































































































































































本文地址:http://www.45fan.com/a/question/71502.html