Decorator模式中遭遇继承与聚合的冲突

一:背景:Decorator

*Decorator 常被翻译成"装饰",我觉得翻译成"油漆工"更形象点,油漆工(decorator)是用来刷油漆的,那么被刷油漆的对象我们称decoratee.这两种实体在Decorator 模式中是必须的。

*Decorator 定义:

动态给一个对象添加一些额外的职责,就象在墙上刷油漆.使用Decorator 模式相比用生成子类方式达到功能的扩充显得更为灵活。

*为什么使用Decorator?

我们通常可以使用继承来实现功能的拓展,如果这些需要拓展的功能的种类很繁多,那么势必生成很多子类,增加系统的复杂性,同时,使用继承实现功能拓展,我们必须可预见这些拓展功能,这些功能是编译时就确定了,是静态的。

使用Decorator 的理由是:这些功能需要由用户动态决定加入的方式和时机.Decorator 提供了"即插即用"的方法,在运行期间决定何时增加何种功能。

*对于该模式,初步归纳为

1.基本功能为接口

2.Decorator参数为接口本身也为接口以便为下一个Decorator的参数

3.基本功能类实现接口 并作为Decorator构造函数的参数,以便在此基础上添加新功能

4.额外功能由Decorator中的数据结构处理

二:问题

这是一段Decorator设计模式的实现例子如下:

基本功能:Counter类

需要添加的功能

1:上限控制

时间: 2024-08-25 20:06:16

Decorator模式中遭遇继承与聚合的冲突的相关文章

连载:面向对象葵花宝典:思想、技巧与实践(40) - DECORATOR模式

掌握了设计模式之道后,我们将以全新的方法来理解设计模式,这个方法更简单.更直观,不信?看几个样例就知道了 ===================================================================== DECORATOR模式(以设计模式之道来理解) [业务] 假设你进入了一个信息安全管理非常严格的公司,这家公司不允许员工自行打印文档,所有的文档打印都需要交给文档打印系统统一管理.文档打印系统会记录每次打印的时间.内容.打印人员......等等,以便后续

Java设计模式之装饰模式(Decorator模式)介绍_java

Decorator常被翻译成"装饰",我觉得翻译成"油漆工"更形象点,油漆工(decorator)是用来刷油漆的,那么被刷油漆的对象我们称decoratee.这两种实体在Decorator模式中是必须的. Decorator定义:动态给一个对象添加一些额外的职责,就象在墙上刷油漆.使用Decorator模式相比用生成子类方式达到功能的扩充显得更为灵活. 为什么使用Decorator 我们通常可以使用继承来实现功能的拓展,如果这些需要拓展的功能的种类很繁多,那么势必生

Java IO 包中的Decorator模式

JDK为程序员提供了大量的类库,而为了保持类库的可重用性,可扩展性和灵活性,其中使用到了大量的设计模式,本文将介绍JDK的I/O包中使用到的Decorator模式,并运用此模式,实现一个新的输出流类. Decorator模式简介 Decorator模式又名包装器(Wrapper),它的主要用途在于给一个对象动态的添加一些额外的职责.与生成子类相比,它更具有灵活性. 有时候,我们需要为一个对象而不是整个类添加一些新的功能,比如,给一个文本区添加一个滚动条的功能.我们可以使用继承机制来实现这一功能,

深入理解MVVM模式中Silverlight的Trigger、Action和Behavior及Silverlight的继承机制

原文:深入理解MVVM模式中Silverlight的Trigger.Action和Behavior及Silverlight的继承机制 接触Silverlight已经有两三个月了,开始一直感觉他和Winform很相似,拖拖控件就行了,所以一直把经历放在了研究后台和服务器交互和性能优化上面,很少去仔细研究Silverlight的页面.前几天,公司突然让修改一个Winform的项目,再回过头来看Winform,有种"不堪回首"的感觉. 十一长假即将来临,在这里先祝大家假期快乐.今天难得有空,

YUI 3中的继承模式及其用法简介

YUI 3中的继承模式及其用法简介 January 6, 2010 at 6:30 am by Stoyan Stefanov 文中讨论了YUI 3 两种代码复用的方式:基于类的继承(classical inheritance pattern)和原型继承(prototypal inheritance)模式. 依赖 在种子文件yui-min.js中就有属于core YUI 3 API 部分的原型模式(prototypal pattern)继承.如果需要类模式(classical pattern)的

设计模式重构应用---Decorator模式

先简单介绍Decorator 模式(装饰模式)的内容和应用场景. 装饰模式可以动态地给一个对象添加额外的职责.虽然,利用子类继承也可以实现这样的功能,但是 装饰模式提供了一个更灵活的方式. 因为继承会为类型引入的静态特质,使得这种扩展方式缺乏灵活性: 并且随着子类的增多(扩展功能的增多),各种子类的组合(扩展功能的组合)会导致更多子类的膨 胀. 下面是标准Decorator 模式的UML结构图: [此图来自GOF <设计模式>一书] 现在结合我实际开发的一个例子谈谈这个模式的重构应用. 还是那

装饰器(Decorator)模式

转自:http://miaoxiaodong78.blog.163.com/blog/static/18765136200701232434996/   Decorator设计模式是典型的结构型模式(在GOF的那本模式的Bible中将模式分为:1.创建型模式:2.结构型模式:3.行为模式三种).它的主要用意是:动态地为对象添加一些额外的功能.(记住上面两种颜色的词汇,理解装饰器模式的精髓所在!)下面是GOF的<Element of reusable Object-Oriented Softwar

JUnit源码分析(四)——从Decorator模式说起

其实我这系列小文,名为源码分析,其实是自己读<设计模式>的读书笔记.Decorator模式在java的IO库中得到应用,java的IO库看起来复杂,其实理解了Decorator模式再回头看可以很好理解并使用.     Decorator模式,也就是装饰器模式,是对象结构型模式之一. 1.意图:动态地给一个对象添加一些额外的职责.给对象添加功能,我们首先想到的是继承,但是如果每增一个功能都需要继承,类的继承体系将无可避免地变的庞大和难以理解.面向对象设计的原则:优先使用组合,而非继承,继承的层次

Design Pattern: Decorator 模式

  学习是分享和合作式的! 转载请注明出处:http://blog.csdn.net/wdzxl198/article/details/9417131: 文章摘自: http://www.riabook.cn/doc/designpattern/: 在Java Swing中的JTextArea元件预设并没有卷轴,因为设计人员认为卷轴的功能并不是一定需要的,而决定让程式人员可以动态选择是否增加卷轴功能,卷 轴的功能是由JScrollPane元件提供,如果您要加入一个具有卷轴功能的JTextArea