热门关键词:

软件开发的装饰者模式

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

来源:

浏览:

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


拿一个比萨饼的对象。

piz1


用Capsicum对象“装饰”它。

PIZ2


用CheeseBurst对象“装饰”它。piz3

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

装饰图案

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



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

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

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

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

定义:


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


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


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

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

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

好处:


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

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

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

缺点:


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

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


用户名 Name
评论 Comment

软件开发  相关内容

——
14

2021-07

OracleNetsuite的建设标题

到目前为止,我们已经为我们OracleNetsuite的标题创建了导航栏。完成标题的下一件事是在图像上方包含图像和文本,如下面的屏幕截图所示:让我们再次查看index.html 文件中标题的部分代码。代码中突出显示的部分显示了标题的图像菜单:要完成图像菜单,我们首先需要在 id … [了解更多]

14

2021-07

OracleNetsuite响应式和移动…

响应式网站:响应式网站是旨在适合所有类型的设备并调整网站布局以最适合屏幕尺寸的网站。无需制作任何其他设备版本的网站以适应小型设备。移动网站:移动网站是专为适应手机、平板电脑等特别小的设备屏幕而设计的网站。需要制作网站的桌面版本以适应移动设备特定的桌面屏幕。响应式网站和移动网站的区… [了解更多]

08

2021-06

OracleNetsuite ​Doc…

OracleNetsuitePython 提供了许多分发 Python 项目的方法。其中一种方法是使用一种称为 Docker 的重要技术。Docker 是一个开源应用程序,允许管理员使用容器创建、管理、部署和复制应用程序。它基本上是一个平台,使开发人员能够通过将应用程序放入容器中… [了解更多]

22

2021-05

OracleNetsuiteERP在公开…

财务负责人戴了两顶帽子:一是遵守法规,以确保公司的行为和会计正确无误,并遵守公司开展业务的不同司法管辖区的法规;二是遵守法规。一种战略,确保公司达到财务里程碑和成功指标。当一家公司上市时,包括通过特殊目的收购公司(SPAC)上市时,这两个角色尤其重要。Oracle NetSuit… [了解更多]

08

2021-03

星空RPA智能链接方案

公司财务人员中记账人员的工作内容:1、从钉钉中下载审批完成的8种审批类型的单据数据,包含合同付款、费用报销等2、记账人员根据付款的性质及费用归属,把记账分成6种形式:合同付款(工程、成本)、合同付款(其他)、非合同付款(工程、成本)、非合同付款(其他)、费用报销(工程、成本)、费… [了解更多]

关注

深信服

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