设计模式之装饰者模式

装饰者模式

概述

动态地给一个对象增加一些额外的职责,就增加对象功能来说,装饰模式比生成子类实现更为灵活。装饰模式是一种对象结构型模式。

解决的问题

在原有的基础上扩充的类的功能,完成原有类所不能完成的功能。

模式比喻

以饮料为主体(咖啡),如果顾客想要摩卡和奶泡咖啡,那么要做的是:
1.拿一个咖啡对象
2.以摩卡对象装饰它
3.以奶泡对象装饰它
4.调用cost方法,并依赖费托将摩卡、奶泡价钱加上去

描述
//抽象饮料
public abstract class Beverage{
}
//实现的某种饮料
public class Espresso extends Beverage{
}
//装饰者 抽象的
public abstract class CondimentDecorator extends Beverage{
}
//实现具体的装饰者
public class Mocha extends CondimentDecorator{
    Beverage beverage;//维持一个被装饰者的引用
    //添加新的操作方法
    ...
}
Java中的实现

Java中的I/O流就是使用的装饰者模式,FileInputStream(被装饰的组件),BufferedInputStream(修饰者),修饰者继承自FilterInputStream,而FilterInputStream和FileInputStream都继承自InputStream。也就是抽象组件和被修饰组件都要继承一个共同的接口,保证使用方便。

缺点

1.造成设计中有大量的小类
2.依赖特定的类型
3.实例化组件,还要包装进装饰者中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值