关于JAVA装饰器模式的思考

学习第十一章的时候,感觉所有模式当中最不好理解的应该就是装饰器

老师讲基本思想的时候感觉自己跟的很好

快讲到例子的时候突然发现自己落下了,没跟上老师的思路

自己下课复习讲义的时候看例子觉得不太好理解

问同学同学也没理解的也不是很清晰

于是我自己检索了一下,又认真理解了一下讲义上的例子

整理了一下我的思考

首先分析一下装饰器模式的基本思想:

假设我们现在有一个类Stack

我们通过不同子类如下来实现不同的功能

但如果我们需要特性的任意组合呢?

我们可能有两种想法:1.使用继承 2.复制粘贴所需方法

第一种有明显的问题,一个类只能有一个父类,不能胡乱继承,有很大限制

第二种可能会导致同一段代码出现在很多类中,在之前的章节中老师明确讲过这是程序员不想看到的,因为可能会导致“牵一发而动全身”——出现一个问题,该段代码所有的副本都要修改

所以这两种都不可行,这时装饰器模式就出现了。

我们实现一个装饰器类,这个类中有一个属性的类型是Stack

这相当于一种委托,装饰器可以通过这个属性实现Stack下不同子类的不同功能的组合

下面分析一个例子来详细说一说

 

 直接看用户代码

对象a的类型是PlainIceCream,是基本实现类

对象b的类型是CandyTopping,其属性Icecream input的类型是PlainIceCream

对象c的类型是PeanutTopping,其属性Icecream input的类型是CandyTopping

对象d的类型是NutsTopping,其属性Icecream input的类型是PeanutTopping

这时d调用AddTopping方法   P.S.以下是CandyTopping的AddTopping方法,只是输出不同

 首先执行input.AddTopping();,其属性Icecream input的类型是PeanutTopping,所以调用PeanutTopping的AddTopping方法,形式又是如上所示,又会执行input.AddTopping();

以此类推,把套娃一层层打开

一直到a的AddTopping,只是输出语句,这种类似于递归的结构停止

最后的输出结果为

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值