剖析设计模式编程中C#对于组合模式的运用
一、引言 二、组合模式的详细介绍 组合模式实现的最关键的地方是――简单对象和复合对象必须实现相同的接口。这就是组合模式能够将组合对象和简单对象进行一致处理的原因。 2.2 组合模式的实现 理解:每一个小家庭中,爸爸妈妈和我,都是爸爸做主,可踢出我跟妈妈中的任何一个,也可增加任何一个。组件模式中的组件可以是单独一个对象组成,也可以是多个组件组成(一个家庭,甚至一个家庭的多级延续); 族员共性代码: //// <summary> /// //族人 抽象出来的族人共性 /// </summary> public abstract class Father { //族人的姓名 protected string name = string.Empty; public string Name { get { return name; } } //增加后代 public abstract void Add(Father boy); //逐出家谱 public abstract void Remove(Father boy); //定义所有族人,做个简介 public abstract void Intro(); }家族成员代码 //男性后代 public class Boy : Father { //构造函数 public Boy() { } public Boy(string Name) { this.name = Name; } List<Father> myFamily = new List<Father>(); //自我简介 public override void Intro() { Console.WriteLine("我是:{0};",Name); foreach (Father f in myFamily) { f.Intro(); } } //增加后代 public override void Add(Father boy) { myFamily.Add(boy); } //逐出家谱 public override void Remove(Father boy) { myFamily.Remove(boy); } } //女性后代 public class Gril : Father { //构造函数 public Gril() { } public Gril(string Name) { this.name = Name; } //自我简介 public override void Intro() { Console.WriteLine("我是:{0};",Name); } //不能添加 public override void Add(Father store) { throw new NotImplementedException(); } //不能删除 public override void Remove(Father store) { throw new NotImplementedException(); } }客户端代码: public static void Main() { //爷爷取老婆 Boy yeye = new Boy("爷爷"); Gril nainai = new Gril("奶奶"); yeye.Add(nainai); //爷爷要孩子 Boy baba = new Boy("爸爸"); Gril gugu = new Gril("姑姑"); yeye.Add(gugu); yeye.Add(baba); //爸爸要我 Boy me = new Boy("me"); baba.Add(me); //我要孩子 Boy son = new Boy("son"); me.Add(son); //爷爷的大家庭,族谱做介绍 yeye.Intro(); Console.Read(); }
安全式组合模式的类图: 组合模式中涉及到三个角色:
三、组合模式的优缺点 组合模式使得客户端代码可以一致地处理对象和对象容器,无需关系处理的单个对象,还是组合的对象容器。 注意的问题: 有时候系统需要遍历一个树枝结构的子构件很多次,这时候可以考虑把遍历子构件的结构存储在父构件里面作为缓存。
五、组合模式在.NET中的应用 组合模式在.NET 中最典型的应用就是应用与WinForms和Web的开发中,在.NET类库中,都为这两个平台提供了很多现有的控件,然而System.Windows.Forms.dll中System.Windows.Forms.Control类就应用了组合模式,因为控件包括Label、TextBox等这样的简单控件,同时也包括GroupBox、DataGrid这样复合的控件,每个控件都需要调用OnPaint方法来进行控件显示,为了表示这种对象之间整体与部分的层次结构,微软把Control类的实现应用了组合模式(确切地说应用了透明式的组合模式)。 六、总结 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |