*本文参考了《JAVA与模式》的部分内容,适合于设计模式的初学者。
合成模型模式属于对象的结构模式,有时又叫做部分-整体模式。合成模式将对象组织到树结构中,可以用来描述整体与部分的关系。合成模式可以使客户端将单纯元素与复合元素同等看待。如文件夹与文件就是合成模式的典型应用。根据模式所实现接口的区别,合成模式可分为安全式和透明式两种。
安全式的合成模式要求管理聚集的方法只出现在树枝构件类中,而不出现在树叶构件类中。
涉及到三个角色:
抽象构件(Component):这是一个抽象角色,它给参加组合的对象定义公共的接口及其默认的行为,可以用来管理所有的子对象。合成对象通常把它所包含的子对象当做类型为Component的对象。在安全式的合成模式里,构件角色并不定义出管理子对象的方法,这一定义由树枝构件对象给出。
树叶构件(Leaf):树叶对象是没有下级子对象的对象,定义出参加组合的原始对象的行为。
树枝构件(Composite):代表参加组合的有下级子对象的对象。树枝构件类给出所有的管理子对象的方法,如Add(),Remove()等。
Component:
public interface Component
{
void sampleOperation();
}// END INTERFACE DEFINITION Component
Leaf:
public class Leaf : Component
{
public void sampleOperation()
{
}
}// END CLASS DEFINITION Leaf
Composite:
public class Composite :Component
{
private ArrayList componentList=new ArrayList();
public void sampleOperation()
{
System.Collections.IEnumerator myEnumerator = componentList.GetEnumerator();
while ( myEnumerator.MoveNext() )
{
((Component)myEnumerator.Current).sampleOperation();
}
}
public void add(Component component)
{
componentList.Add (component);
}
public void remove(Component component)
{
componentList.Remove (component);
}
}// END CLASS DEFINITION Composite
与安全式的合成模式不同的是,透明式的合成模式要求所有的具体构件类,不论树枝构件还是树叶构件,均符合一个固定的接口。类图如下所示:
抽象构件(Component):这是一个抽象角色,它给参加组合的对象定义公共的接口及其默认的行为,可以用来管理所有的子对象。要提供一个接口以规范取得和管理下层组件的接口,包括Add(),Remove()。
树叶构件(Leaf):树叶对象是没有下级子对象的对象,定义出参加组合的原始对象的行为。树叶对象会给出Add(),Remove()等方法的平庸实现。
树枝构件(Composite):代表参加组合的有下级子对象的对象。定义出这样的对象的行为。
Component:
public interface Component
{
void sampleOperation();
void add(Component component);
void remove(Component component);
}// END INTERFACE DEFINITION Component
Leaf:
public class Leaf : Component
{
private ArrayList componentList=null;
public void sampleOperation()
{
}
public void add(Component component)
{
}
public void remove(Component component)
{
}
}// END CLASS DEFINITION Leaf
Composite:
public class Composite :Component
{
private ArrayList componentList=new ArrayList();
public void sampleOperation()
{
System.Collections.IEnumerator myEnumerator = componentList.GetEnumerator();
while ( myEnumerator.MoveNext() )
{
((Component)myEnumerator.Current).sampleOperation();
}
}
public void add(Component component)
{
componentList.Add (component);
}
public void remove(Component component)
{
componentList.Remove (component);
}
}// END CLASS DEFINITION Composite
分享到:
相关推荐
设计模式C#描述之——简单工厂模式,让你学习C#的一种设计模式
C#程序设计——Windows项目开发 C#程序设计——Windows项目开发
《设计模式——基于C#的工程化实践及扩展》相关的源码 ,这是一本讲设计模式的很好的书, 作者有深厚的功底, 从汇编到C++ ,再到C#/Java 等 ,并结合的思想 Martin Fowler的思想 ,对设计模式做了深刻的思考.
完全由C#语言来描述的设计模式,是从事.NET开发的程序开发,设计人员必读书籍
C#设计模式——装饰模式应用实例,开发一套图形界面构件库的框架实例。
c#案例————餐饮管理系统
单例模式设计。
c#工厂模式——简单工厂_抽象工厂实例
c#插件模式 ——例子(利用反射机制) foreach (ListViewItem item in listView1.Items) { if (item.Checked) { Assembly assembly = Assembly.LoadFile(Path.Combine(pluginpath, "TestComWin.dll")); // ...
c#面向对象——封装
C#课程设计——自助取款机软件设计,20个字真的很难!
《数据结构与算法——C#语言描述,C# 数据结构 源代码 第一本C#数据结构的书
C#操作Word——C#向Word文档中写入文字
挺好的Visual_C#_2008——设计QQ用户登录界面Visual_C#_2008——设计QQ用户登录界面
课件 C# 共3——01
课件 C# 共2——02
C#设计模式(23种设计模式) 1. 单件模式(Singleton Pattern) 2. 抽象工厂(Abstract Factory) 3. 建造者模式(Builder) 4. 工厂方法模式(Factory Method) 5. 原型模式(Prototype) 结构型: 6. 适配器...
工厂方法模式之所以可以解决简单工厂的模式,是因为它的实现把具体产品的创建推迟到子类中,此 时工厂类不再负责所有产品的创建,而只是给出具体工厂必须实现的接口,这样工厂方法模式就可以允许 系统不修改工厂类...
第7篇主要是一些针对Web和Web Service领域的模式设计技术。 本书主要针对对C#语言和.NET Framework平台有一定了解或有一定应用经验的用户,尤其适于那些希望运用模式技术在设计和开发方面多应对些挑战的用户。
设计模式:基于C#的工程化实现及扩展