热门关键词:

软件开发的装饰者模式

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

来源:

浏览:

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


拿一个比萨饼的对象。

piz1


用Capsicum对象“装饰”它。

PIZ2


用CheeseBurst对象“装饰”它。piz3

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

装饰图案

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



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

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

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

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

定义:


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


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


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

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

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

好处:


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

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

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

缺点:


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

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


用户名 Name
评论 Comment

软件开发  相关内容

——
30

2019-09

软件开发的轻量化设计模式

Flyweight模式是结构设计模式之一,因为该模式提供了减少对象数量的方式,从而改善了应用程序所需的对象结构。当我们需要创建大量相似对象(例如10 5)时,将使用Flyweight模式。轻量级物体的一个重要特征是它们是 不可变的。这意味着一旦构建它们便无法对其进行修改。为什么我… [了解更多]

30

2019-09

某石油集团油气田公司信息报送系统

实现了公司信息报送系统的稳定高效运行;满足各二级单位和三级单位对信息报送平台的使用需求,有效提高了工作效率。主要功能有:用户基本信息管理、角色权限管理,部门管理,报送栏目管理,图片作者和文字作者管理,公告管理,菜单管理,配置管理、报送信息管理,审阅人权限设置,信息搜索,信息审核、… [了解更多]

05

2019-09

奇怪的重复模板模式(CRTP)

通过奇怪的重复模板模式(CRTP)可以完全避免使用VPtr和VTable。CRTP是C ++中的一种设计模式,其中类X派生自使用X本身作为模板参数的类模板实例化。更一般地,它被称为F结合多态性。filter_none编辑play_arrowbrightness_4// Image… [了解更多]

05

2019-09

软件设计奇怪的重复模板模式(CRTP)

建议将虚函数和运行时多态性作为先决条件。下面是一个演示运行时多态性的示例程序。filter_none编辑play_arrowbrightness_4// A simple C++ program to demonstrate run-time// polymorphism#inc…… [了解更多]

02

2019-08

app开发公司的软件设计的迭代器模式

迭代器模式是一种相对简单且经常使用的设计模式。每种语言都有很多数据结构/集合。每个集合都必须提供一个迭代器,让迭代器遍历其对象。但是,在执行此操作时,应确保它不会公开其实现。假设我们正在构建一个需要我们维护通知列表的应用程序。最终,您的代码的某些部分将需要迭代所有通知。如果我们将… [了解更多]

关注

成都软件开发

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