装饰者模式

装饰者模式动态地将责任附加到对象上,若要扩展功能,装饰者提供比继承更有弹性的替代方案,

  1. 组件和装饰者继承自相同的抽象类/接口
  2. 装饰者有个变量记录组件
  3. 通过嵌套调用实现装饰

for example:
星巴克咖啡:
  • 基础咖啡作为组件
  • 调料作为装饰者
  • 调料可以任意搭配,比如:奶泡、摩卡、糖浆等等

//超类组件
public abstract class component {
methodA();
methodB();
}

//继承自超类组件,为了让装饰者和组件有相同的类型,好使用多态
public abstract class decorator extends component {
methodA();
}

//组件子类
public class ConcreteComponents extends component {
methodA();
methodB();
}

//装饰类子类
public class ConcreteDecorator extends decorator {
component c;
method....
}

public class ConcreteDecorator2 extends decorator {
component c;
method....
}
...public class ConcreteDecoratorN extends decorator {
component c;
method....
}..


//使用实例
void main(){
component c = new ConcreteComponent; //新建一杯基础咖啡
c = new ConcreteDecorator(c); //加上摩卡
c = new ConcreteDecorator(c); //加上摩卡,变成双份摩卡ß
c = new ConcreteDecorator2(c); //加上奶泡
.....
}

总结:装饰者通过继承类型、多态及组合使用达到装饰效果


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值