文档章节

Decorator装饰模式

ruyees
 ruyees
发布于 2014/10/05 11:47
字数 456
阅读 6
收藏 0

Decorator装饰模式是一种结构型模式,它主要是解决:“过度地使用了继承来扩展对象的功能”,由于继承为类型引入的静态特质,使得这种扩展方式缺乏灵活性;并且随着子类的增多(扩展功能的增多),各种子类的组合(扩展功能的组合)会导致更多子类的膨胀(多继承)。继承为类型引入的静态特质的意思是说以继承的方式使某一类型要获得功能是在编译时。所谓静态,是指在编译时;动态,是指在运行时。

GoF《设计模式》中说道:动态的给一个对象添加一些额外的职责。就增加功能而言,Decorator模式比生成子类更为灵活。

下面来看看Decorator模式的结构:

 

 

 

看这个结构好像不是很明白,下面我根据代码讲解一下这个结构。我想了一个场景:我们现在用的手机功能很多,我就用Decorator模式实现一下对某个手机的GSP和蓝牙功能扩展。

首先,我们需要一个手机的接口或者是抽象类,我这里就用抽象类来实现,代码如下:

 

 

package decorator_phone;

public abstract class AbstractCellPhone {
	public abstract String CallNumber();
    public abstract String SendMessage();
}

 

 

AbstractCellPhone也就是结构图中的Component,然后,我再来实现NokiaMoto的手机类,这类要继承AbstractCellPhone,也就是图中ConcreteComponent类要继承Component,实现代码如下:

 

 

package decorator_phone;

public class NokiaPhone extends AbstractCellPhone {

	public String CallNumber() {
		return "NokiaPhone call sombody";
	}

	public String SendMessage() {
		return "NokiaPhone send a message to somebody";
	}
}

 

package decorator_phone;

public class MotoPhone extends AbstractCellPhone {

	public String CallNumber() {
		return "MotoPhone call sombody";
	}

	public String SendMessage() {
		return "MotoPhone send a message to somebody";
	}
}

 

 

接下来我需要一个Decorator接口或者抽象类,实现代码如下:

本文转载自:http://zuoqiang.iteye.com/blog/737146

共有 人打赏支持
上一篇: Java 集合类
下一篇: Flyweight模式
ruyees
粉丝 3
博文 71
码字总数 0
作品 0
深圳
产品经理
私信 提问
【设计模式】——装饰者模式

装饰模式概述 装饰模式可以在不改变一个对象本身功能的基础上给对象增加额外的新行为,在现实生活中,这种情况也到处存在,例如一张照片,我们可以不改变照片本身,给它增加一个相框,使得它...

u013043341
2017/07/16
0
0
设计模式-装饰模式

模式定义 动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式比生成子类更为灵活。 模式结构 Component:组件对象的接口,可以给这些对象动态地增加职责。ConcreteComponet:具体的...

wjk_snail
2016/03/23
21
0
设计模式--装饰模式

装饰模式(decorator,别名Wrapper): 装饰器模式的应用场景: 装饰器模式的缺点: 示例: 装饰者模式测试类GirlDecoratorTest.java 描述接口类Description.java 中国女孩类(被装饰类)Chinese...

有钱有爱
2016/04/08
15
0
JAVA 设计模式 --- 装饰者模式

装饰者模式 (Decorator) 动态地给一个对象添加一些额外的职责。是一种结构式模式,就增加功能来说,Decorator 模式相比生成子类更为灵活。换言之,客户端并不会觉得对象在装饰前和装饰后有什...

pan_1308
2016/10/19
16
0
装饰模式(Decorator)

顾名思义,装饰模式就是给一个对象增加一些新的功能,而且是动态的,要求装饰对象和被装饰对象实现同一个接口,装饰对象持有被装饰对象的实例,关系图如下: Source类是被装饰类,Decorator...

Carbenson
2015/09/01
35
0

没有更多内容

加载失败,请刷新页面

加载更多

EOS docker开发环境

使用eos docker镜像是部署本地EOS开发环境的最轻松愉快的方法。使用官方提供的eos docker镜像,你可以快速建立一个eos开发环境,可以迅速启动开发节点和钱包服务器、创建账户、编写智能合约....

汇智网教程
今天
4
0
《唐史原来超有趣》的读后感优秀范文3700字

《唐史原来超有趣》的读后感优秀范文3700字: 作者:花若离。我今天分享的内容《唐史原来超有趣》这本书的读后感,我将这本书看了一遍之后就束之高阁了,不过里面的内容一直在在脑海中回放,...

原创小博客
今天
10
0
IC-CAD Methodology知识图谱

CAD (Computer Aided Design),计算机辅助设计,指利用计算机及其图形设备帮助设计人员进行设计工作,这个定义同样可以用来近似描述IC公司CAD工程师这个岗位的工作。 早期IC公司的CAD岗位最初...

李艳青1987
今天
12
0
CompletableFuture get方法一直阻塞或抛出TimeoutException

问题描述 最近刚刚上线的服务突然抛出大量的TimeoutException,查询后发现是使用了CompletableFuture,并且在执行future.get(5, TimeUnit.SECONDS);时抛出了TimeoutException异常,导致接口响...

xiaolyuh
今天
6
0
dubbo 搭建与使用

官网:http://dubbo.apache.org/en-us/ 一,安装监控中心(可以不安装) admin管理控制台,monitor监控中心 下载 bubbo ops 这个是新版的,需要node.js环境,我没有就用老版的了...

小兵胖胖
今天
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部