热门关键词:

软件开发的装饰者模式

添加时间:2019-06-24 13:58:07

来源:

浏览:

所以我们现在要做的就是拿一个比萨饼并在运行时用装饰“装饰”它:


拿一个比萨饼的对象。

piz1


用Capsicum对象“装饰”它。

PIZ2


用CheeseBurst对象“装饰”它。piz3

调用getCost()并使用委托而不是继承来计算浇头成本。

装饰图案

我们最终得到的是一个披萨配奶酪爆米花和辣椒配料。可视化包装器之类的“装饰器”对象。以下是装饰器的一些属性:



装饰器与它们装饰的对象具有相同的超类型。

您可以使用多个装饰器来包装对象。

由于装饰器与对象具有相同的类型,因此我们可以传递装饰对象而不是原始对象。

我们可以在运行时装饰对象。

定义:


装饰器模式动态地将附加职责附加到对象。装饰器为子类化提供了灵活的替代扩展功能。


类图:piz5图像src:维基百科


每个组件可以单独使用,也可以由装饰器包装。

每个装饰器都有一个实例变量,它保存对它所装饰的组件的引用(HAS-A关系)。

ConcreteComponent是我们要动态装饰的对象。

好处:


装饰器模式可用于使得可以在运行时扩展(装饰)某个对象的功能。

装饰器模式是子类化的替代方案。子类在编译时添加行为,并且更改会影响原始类的所有实例; 装饰可以在运行时为单个对象提供新的行为。

Decorator提供了一种即付即用的方法来增加责任。您可以定义一个简单的类,并使用Decorator对象逐步添加功能,而不是尝试支持复杂的可自定义类中的所有可预见功能。

缺点:


装饰器可以使实例化组件的过程复杂化,因为您不仅需要实例化组件,还要将其包装在许多装饰器中。

让装饰器跟踪其他装饰器可能很复杂,因为回顾装饰器链的多个层开始推动装饰器模式超出其真实意图。


用户名 Name
评论 Comment

软件开发  相关内容

——
03

2019-07

纪念差一点改变世界的coreseek的错

Coreseek 是一款中文全文检索/搜索软件,以GPLv2许可协议开源发布,基于Sphinx研发并独立发布,专攻中文搜索和信息处理领域,适用于行业/垂直搜索、论坛/站内搜索、数据库搜索、文档/文献检索、信息检索、数据挖掘等应用场景,用户可以免费下载使用整理了coreseek/s… [了解更多]

24

2019-06

软件开发如何防止反射,序列化和克隆的单例

反射: 可以导致反射破坏单例类的单例属性,如下例所示:filter_none编辑play_arrowbrightness_4// Java code to explain effect of Reflection// on Singleton propertyimport jav…… [了解更多]

24

2019-06

软件开发的装饰者模式

所以我们现在要做的就是拿一个比萨饼并在运行时用装饰“装饰”它:拿一个比萨饼的对象。piz1用Capsicum对象“装饰”它。PIZ2用CheeseBurst对象“装饰”它。piz3调用getCost()并使用委托而不是继承来计算浇头成本。装饰图案我们最终得到的是一个披萨配奶酪爆米… [了解更多]

关注

成都软件开发

  • 地 址:成都市人民南路四段成科西路三号 863国家孵化园
  • 电 话:18215 660330
  • 手机:18215 660330
  • 传 真:18215 660330
  • 邮 箱:179001057@qq.com
  • 邮政编码:610000