组合模式汇编.docx

一、引言 在软件开发过程中,我们经常会遇到处理简单对象和复合对象的情况,例如对操作系统中目录的处理就是这样的一个例子,因为目录可以包括单独的文件,也可以包括文件夹,文件夹又是由文件组成的,由于简单对象和复合对象在功能上区别,导致在操作过程中必须区分简单对象和复合对象,这样就会导致客户调用带来不必要的麻烦,然而作为客户,它们希望能够始终一致地对待简单对象和复合对象。然而组合模式就是解决这样的问题。下面让我们看看组合模式是怎样解决这个问题的。 二、组合模式的详细介绍 2.1 组合模式的定义 组合模式允许你将对象组合成树形结构来表现”部分-整体“的层次结构,使得客户以一致的方式处理单个对象以及对象的组合。下面我们用绘制的例子来详细介绍组合模式,图形可以由一些基本图形元素组成(如直线,圆等),也可以由一些复杂图形组成(由基本图形元素组合而成),为了使客户对基本图形和复杂图形的调用保持一致,我们使用组合模式来达到整个目的。 组合模式实现的最关键的地方是——简单对象和复合对象必须实现相同的接口。这就是组合模式能够将组合对象和简单对象进行一致处理的原因。 2.2 组合模式的实现 介绍完组合模式的定义之后,让我们以图形的例子来实现组合模式,具体代码如下: // 通过一些简单图形以及一些复杂图形构建图形树来演示组合模式 // 客户端调用 class Client { static void Main(string[] args) { ComplexGraphics complexGraphics = new ComplexGraphics(一个复杂图形和两条线段组成的复杂图形); complexGraphics.Add(new Line(线段A)); ComplexGraphics CompositeCG = new ComplexGraphics(一个圆和一条线组成的复杂图形); CompositeCG.Add(new Circle(圆)); CompositeCG.Add(new Circle(线段B)); complexGraphics.Add(CompositeCG); Line l = new Line(线段C); complexGraphics.Add(l); // 显示复杂图形的画法 Console.WriteLine(复杂图形的绘制如下:); Console.WriteLine(---------------------); complexGraphics.Draw(); Console.WriteLine(复杂图形绘制完成); Console.WriteLine(---------------------); Console.WriteLine(); // 移除一个组件再显示复杂图形的画法 complexGraphics.Remove(l); Console.WriteLine(移除线段C后,复杂图形的绘制如下:); Console.WriteLine(---------------------); complexGraphics.Draw(); Console.WriteLine(复杂图形绘制完成); Console.WriteLine(---------------------); Console.Read(); } } /// summary /// 图形抽象类, /// /summary public abstract class Graphics { public string Name { get; set; } public Graphics(string name) { this.Name = name; } public abstract void Draw(); public abstract void

文档评论(0)

1亿VIP精品文档

相关文档