Java设计模式之装饰者模式

来源:互联网 发布:it编程 编辑:程序博客网 时间:2024/06/04 18:09


基本概念:

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


可以看下面类图:



从上图可以看出,装饰者模式有以下几个角色:

Component:每个装饰者模式中都有一个父组件,其他的组件均继承此组件。

ConcreteCompent:可以动态增加新的行为,可以有多个。

Decorator:抽象装饰者,将Component组合在其中,具体装饰者共同的接口。

ConcreteDecorator:具体装饰者,继承Decorator,可以增加新的行为。


应用:

这是一个咖啡订单系统,Beverage作为Component,Espresso、HouseBlend作为ConcreteCompent,表示咖啡

的具体种类,但是订单系统结算的时候还要考虑是否加糖,加牛奶等等,将这些作为装饰者。所以

CondimentDecorator作为Decorator,Soy、Moka作为ConcreteDecorator。


Component:



ConcreteCompent:



Decorator:



ConcreteDecorator:


测试类:


可以看到在测试类中,通过计算一杯Espresso或者HouseBlend是否添加了Moka或者Soy来决定一杯咖啡的

价格,这种设计就比把所有情况的咖啡(比如:带soy的Espresso,带Moka的Espresso等等)都设计成

concreteComponent来继承Component要简单很多。


如果还是不能理解装饰者模式,可以参考Java IO:

原创粉丝点击