Decorator 装饰者模式

Decorator 装饰者模式

目录

[TOC]

1. 概述

1.1. Head First设计模式定义

装饰者模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰者来包裹真实的对象。

所以装饰者可以动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的方案。

1.2. 自我理解

(1)假设我们手头已经有了一个类,可以执行一些功能
(2)但是我们还是希望对这个类的功能做一些增强,此时怎么办呢?基于已有的类的功能基础之上,再增强一些功能,可以做装饰

装饰器模式有一些非常经典的实现
(1)比如java的io体系,可以一层包装一层,一层包装一层,外面的一层,都会对立面的一层进行功能的增强。
(2)还有就是spring的aop,aop这块可以基于动态代理的理念,装饰我们的目标对象,然后加入事务控制,日志打印之类的功能。

1.3. 装饰者模式的组成

抽象构件 (Component):给出抽象接口或抽象类,以规范准备接收附加功能的对象。
具体构件 (ConcreteComponent):定义将要接收附加功能的类。
抽象装饰 (Decorator):装饰者共同要实现的接口,也可以是抽象类。
具体装饰 (ConcreteDecorator):持有一个 Component 对象,负责给构件对象“贴上”附加的功能。

2. UML

3. Example

3.1. 场景

1、拿一个深焙咖啡 (DarkRoast) 对象
2、以摩卡 (Mocha) 装饰它
3、以豆浆 (Soy) 装饰它
4、调用 cost() 方法,并依赖委托将调料的价钱加上去

3.2. 代码实现

3.3. 运行结果

原创文章,转载请注明: 转载自LoserZhao – 诗和远方[ http://www.loserzhao.com/ ]

本文链接地址: http://www.loserzhao.com/java/designpattern/decorator-designpattern.html

文章的脚注信息由WordPress的wp-posturl插件自动生成

发表评论?

0 条评论。

发表评论


注意 - 你可以用以下 HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

使用新浪微博登陆