- 1、本文档共48页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
软件设计-理论课03.ppt
描述Decorator(装饰)模式 * 模式名和分类(Name) 模式名:Decorator(装饰) 分类:对象结构型模式 * 意图(Intent) 动态地给一个对象添加一些额外的职责。 就增加功能来说, Decorator模式相比生成子类更为灵活。 * 别名(Also Known As) 包装器Wrapper * 动机(Motivation) 有时我们希望给某个对象而不是整个类添加一些功能。 使用继承机制是添加功能的一种有效途径,从其他类继承过来的边框特性可以被多个子类的实例所使用。但这种方法不够灵活,因为边框的选择是静态的,用户不能控制对组件加边框的方式和时机。 一种较为灵活的方式是将组件嵌入另一个对象中,我们称这个嵌入的对象为装饰。这个装饰与它所装饰的组件接口一致,因此它对使用该组件的客户透明。 * 动机(Motivation) 透明性使得你可以递归的嵌套多个装饰,从而可以添加任意多的功能,如下图所示。 * 动机(Motivation) 例如,假定有一个对象Textview,它可以在窗口中显示正文。缺省的Textview没有滚动条,因为我们可能有时并不需要滚动条。当需要滚动条时,我们可以用ScrollDecorator添加滚动条。如果我们还想在Textview周围添加一个粗黑边框,可以使用BorderDecorator添加。因此只要简单地将这些装饰和Textview进行组合,就可以达到预期的效果。 下面的对象图展示了如何将一个Textview对象与BorderDecorator以及ScrollDecorator对象组装起来产生一个具有边框和滚动条的文本显示窗口。 * 动机(Motivation) ScrollDecorator和BorderDecorator 类是Decorator类的子类。Decorator类是一个可视组件的抽象类,用于装饰其他可视组件,如下图所示。 * 动机(Motivation) VisualComponent是一个描述可视对象的抽象类,它定义了绘制和事件处理的接口。 Decorator的子类为特定功能可以自由地添加一些操作。 这个模式中有一点很重要,它使得在VisualComponent可以出现的任何地方都可以有装饰。因此,客户通常不会感觉到装饰过的组件与未装饰组件之间的差异,也不会与装饰产生任何依赖关系。 * 适用性(Applicability) 以下情况使用Decorator模式 在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责。 处理那些可以撤消的职责。 当不能采用生成子类的方法进行扩充时。一种情况是,可能有大量独立的扩展,为支持每一种组合将产生大量的子类,使得子类数目呈爆炸性增长。另一种情况可能是因为类定义被隐藏,或类定义不能用于生成子类。 * 结构(Structure) * 参与者(Participants) Component ( VisualComponent ) 定义一个对象接口,可以给这些对象动态地添加职责。 ConcreteComponent (TextView) 定义一个对象,可以给这个对象添加一些职责。 Decorator 维持一个指向Component对象的指针,并定义一个与Component接口一致的接口。 ConcreteDecorator (BorderDecorator, ScrollDecorator) 向组件添加职责。 * 协作(Collaborations) Decorator将请求转发给它的Component对象,并有可能在转发请求前后执行一些附加的动作。 * 效果(Consequences) 比静态继承更灵活 避免在层次结构高层的类有太多的特征 Decorator与它的C o m p o n e n t不一样 有许多小对象 * 实现(Implementation) 接口的一致性 省略抽象的Decorator类 保持Component类的简单性 改变对象外壳与改变对象内核 * 代码示例(Sample Code) 略(见书本P119(中文版)) * 已知应用(Known Uses) 略(见书本P120) * 相关模式(Related Patterns) Adapter Composite Strategy * 设计模式 Design Patterns 设计模式编目(Catalog) * Purpose Creational Structural Behavioral Scope Class Factory Method Adapter (class) InterpreterTemplate Method Object Abstract Factory Builder Prototype Singleton Adapter (object
文档评论(0)