1 / 14
文档名称:

软件设计模式——组合模式.doc

格式:doc   大小:96KB   页数:14页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

软件设计模式——组合模式.doc

上传人:文库旗舰店 2020/1/11 文件大小:96 KB

下载得到文件列表

软件设计模式——组合模式.doc

相关文档

文档介绍

文档介绍:positePattern)动机(Motivate):组合模式有时候又叫做部分-整体模式,它使我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以向处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。意图(Intent):将对象组合成树形结构以表示“部分-整体”posite模式使得用户对单个对象和组合对象的使用具有一致性。-----------《设计模式》GOF结构图(Struct):生活中的例子:适用性:  -,用户将统一地使用组合结构中的所有对象。代码实现:posite模式,通过一些基本图像元素(直线、圆等)以及一些复合图像元素(由基本图像元素组合而成)构建复杂的图形树。在设计中我们对每一个对象都配备一个Draw()方法,在调用时,会显示相关的图形。可以看到,这里复合图像元素它在充当对象的同时,又是那些基本图像元素的一个容器。先看一下基本的类结构图:图中橙色的区域表示的是复合图像元素。示意性代码:1 public abstract class Graphics2 {3     protected string _name;4 5     public Graphics(string name)6     {7          = name;8     }9     public abstract void Draw();10 }11 12 public class Picture : Graphics13 {14     public Picture(string name)15         : base(name)16     { }17     public override void Draw()18     {19         //20     }21 22     public ArrayList GetChilds()23     { 24         //返回所有的子对象25     }26 }而其他作为树枝构件,实现代码如下:1 public class Line:Graphics2 {3     public Line(string name)4         : base(name)5     { }6 7     public override void Draw()8     {9         ("Draw a" + ());10     }11 }12 13 public class Circle : Graphics14 {15     public Circle(string name)16         : base(name)17     { }18 19     public override void Draw()20     {21         ("Draw a" + ());22     }23 }24 25 public class Rectangle : Graphics26 {27     public Rectangle(string name)28         : base(name)29     { }30 31     public override void Draw()32     {33         ("Draw a" + ());34     }35 }现在我们要对该图像元素进行处理:在客户端程序中,需要判断返回对象的具体类型到底是基本图像元素,还是复合图像元素。如果是复合图像元素,我们将要用递归去处理,然而这种处理的结果却增加了客户端程序与复杂图像元素内部结构之间的依赖,那么我们如何去解耦这种关系呢?我们希望的是客户程序可以像处理基本图像元素一样来处理复合图像元素,posite模式了,需要把对于子对象的管理工作交给复合图像元素,为了进行子对象的管理,它必须提供必要的Add(),Remove()等方法,类结构图如下:示意代码:1 public abstract class Graphics2 {3     protected string _name;4 5     public Graphics(string name)6     {7          = name;8     }9     public abstract void Draw();10     public abstract