结构型模式组合模式优秀课件.ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《结构型模式组合模式优秀课件.ppt》由会员分享,可在线阅读,更多相关《结构型模式组合模式优秀课件.ppt(43页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、结构型模式组合模式第1页,本讲稿共43页上篇回顾上篇回顾装饰者模式装饰者模式装装饰饰者者模模式式:动动态态地地将将职职责责附附加加到到对对象象上上。若若要要扩扩展展功功能能,装装饰饰者者提提供供了了比比继继承承更更有有弹弹性性的的替代方案。替代方案。2第2页,本讲稿共43页3组合模式组合模式组合模式有时候又叫做部分组合模式有时候又叫做部分-整体模式,它使整体模式,它使我们树型结构的问题中,模糊了简单元素和我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以向处理简单复杂元素的概念,客户程序可以向处理简单元素一样来处理复杂元素,从而使得客户程元素一样来处理复杂元素,从而使得客户程序
2、与复杂元素的内部结构解耦。序与复杂元素的内部结构解耦。第3页,本讲稿共43页4生活中的例子生活中的例子组合模式将对象组合成树形结构以表示组合模式将对象组合成树形结构以表示部分部分-整体整体的层次结构。让用户一致地使用单个对的层次结构。让用户一致地使用单个对象和组合对象。虽然例子抽象一些,但是算术象和组合对象。虽然例子抽象一些,但是算术表达式确实是组合的例子。算术表达式包括操表达式确实是组合的例子。算术表达式包括操作数、操作符和另一个操作数。操作数可以是作数、操作符和另一个操作数。操作数可以是数字,也可以是另一个表达式。这样,数字,也可以是另一个表达式。这样,2+3和和(2+3)+(4*6)都是
3、合法的表达式。)都是合法的表达式。第4页,本讲稿共43页5生活中的例子生活中的例子第5页,本讲稿共43页6生活中的例子生活中的例子在在Word中中我我们们经经常常会会将将一一些些图图形形元元素素进进行行“组组合合”,组组合合以以后后的的图图形形还还可可以以向向简简单单图图元元那那样样进进行行移移动动、变变形形等等等等操操作作;除除此此以以外外,在在Word中中,我我们们对对于于一一个个字字符符、一一个个词词组组、一一句句话话、一一个个段段落落,甚甚至至是是整整篇篇文文章章的的操操作作是是相相同同的的,我我们们都都可可以以进进行行剪剪切切、复复制制,进进行行字字体体与与大大小小的的调调整整,进进
4、行行颜颜色色的的变变换换。这这些些例例子子都都是是Composite模模式式的的实实例例,我我们们将将简简单单的的元元素素组组合合成成复复杂杂的的元元素素,然然后后还还可可以以像像操操作作简简单单元元素素那样操作组合元素。那样操作组合元素。第6页,本讲稿共43页7认识装饰者模式认识装饰者模式结构结构第7页,本讲稿共43页8认识装饰者模式认识装饰者模式参与者参与者Component为组合中的对象声明接口。为组合中的对象声明接口。在适当的情况下,实现所有类共有接口的缺省行为。在适当的情况下,实现所有类共有接口的缺省行为。声明一个接口用于访问和管理声明一个接口用于访问和管理Component的子组件
5、。的子组件。在递归结构中定义一个接口,用于访问一个父组件,并在递归结构中定义一个接口,用于访问一个父组件,并在合适的情况下实现。在合适的情况下实现。Leaf在组合中表示叶节点对象,叶节点对象没有子节点。在组合中表示叶节点对象,叶节点对象没有子节点。在组合中定义图元对象的行为。在组合中定义图元对象的行为。第8页,本讲稿共43页9认识装饰者模式认识装饰者模式参与者参与者Composite定义有子部件的那些部件的行为。定义有子部件的那些部件的行为。存储子部件。存储子部件。在在Component接口中实现与子部件有关的操作。接口中实现与子部件有关的操作。Client通过通过Component接口操纵组
6、合部件的对象。接口操纵组合部件的对象。第9页,本讲稿共43页10示例示例通通过过一一些些基基本本图图像像元元素素(直直线线、圆圆等等)以以及及一一些些复复合合图图像像元元素素(由由基基本本图图像像元元素素组组合合而而成成)构构建建复复杂杂的的图图形形。在在设设计计中中我我们们对对每每一一个个对对象象都都配配备备一一个个Draw()方方法法,在在调调用用时时,会会显显示示相相关关的的图图形形。可可以以看看到到,这这里里复复合合图图像像元元素素它它在在充充当当对对象象的的同同时时,又又是是那那些些基基本本图图像像元元素素的的一个容器。一个容器。第10页,本讲稿共43页11示例示例第11页,本讲稿共
7、43页12第一次尝试第一次尝试namespace NoPattern public abstract class Graphics protected string name;public Graphics(string name)this.name=name;public abstract void Draw();第12页,本讲稿共43页13第一次尝试第一次尝试using System;namespace NoPattern public class Line:Graphics public Line(string name):base(name)/public override void
8、Draw()Console.WriteLine(Draw a+name.ToString();第13页,本讲稿共43页14第一次尝试第一次尝试using System;namespace NoPattern public class Circle:Graphics public Circle(string name):base(name)/public override void Draw()Console.WriteLine(Draw a+name.ToString();第14页,本讲稿共43页15第一次尝试第一次尝试using System;namespace NoPattern publ
9、ic class Rectangle:Graphics public Rectangle(string name):base(name)/public override void Draw()Console.WriteLine(Draw a+name.ToString();第15页,本讲稿共43页16第一次尝试第一次尝试using System;using System.Collections;namespace NoPattern public class Picture:Graphics public Picture(string name):base(name)/public overr
10、ide void Draw()/public ArrayList GetChild()/第16页,本讲稿共43页17存在的问题存在的问题现在我们要对该图像元素进行处理:在客户端现在我们要对该图像元素进行处理:在客户端程序中,需要判断返回对象的具体类型到底是程序中,需要判断返回对象的具体类型到底是基本图像元素,还是复合图像元素。如果是复基本图像元素,还是复合图像元素。如果是复合图像元素,我们将要用递归去处理,然而这合图像元素,我们将要用递归去处理,然而这种处理的结果却增加了客户端程序与复杂图像种处理的结果却增加了客户端程序与复杂图像元素内部结构之间的依赖,那么我们如何去解元素内部结构之间的依赖,
11、那么我们如何去解耦这种关系呢?耦这种关系呢?第17页,本讲稿共43页18使用组合模式使用组合模式透明方式透明方式我们希望的是客户程序可以像处理基本图像元我们希望的是客户程序可以像处理基本图像元素一样来处理复合图像元素,这就要引入素一样来处理复合图像元素,这就要引入Composite模式了,需要把对于子对象的管模式了,需要把对于子对象的管理工作交给复合图像元素,为了进行子对象理工作交给复合图像元素,为了进行子对象的管理,它必须提供必要的的管理,它必须提供必要的Add(),Remove()等方法。等方法。第18页,本讲稿共43页19使用组合模式使用组合模式透明方式透明方式第19页,本讲稿共43页2
12、0示例代码示例代码namespace CompositPattern public abstract class Graphics protected string name;public Graphics(string name)this.name=name;public abstract void Draw();public abstract void Add(Graphics g);public abstract void Remove(Graphics g);第20页,本讲稿共43页21示例代码示例代码using System;namespace CompositPattern pub
13、lic class Line:Graphics public Line(string name):base(name)/public override void Draw()Console.WriteLine(Draw a +name.ToString();public override void Add(Graphics g)/public override void Remove(Graphics g)/第21页,本讲稿共43页22示例代码示例代码using System;namespace CompositPattern public class Circle:Graphics publ
14、ic Circle(string name):base(name)/public override void Draw()Console.WriteLine(Draw a +name.ToString();public override void Add(Graphics g)/public override void Remove(Graphics g)/第22页,本讲稿共43页23示例代码示例代码using System;namespace CompositPattern public class Rectangle:Graphics public Rectangle(string nam
15、e):base(name)/public override void Draw()Console.WriteLine(Draw a +name.ToString();public override void Add(Graphics g)/public override void Remove(Graphics g)/第23页,本讲稿共43页24示例代码示例代码using System;using System.Collections;namespace CompositPattern public class Picture:Graphics protected ArrayList picL
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 结构 模式 组合 优秀 课件
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内