Java装饰器模式详解
@author:Jingdai
@date:2021.06.03
案例
假设你开了一个咖啡店,目前有三种咖啡,HouseBlend、DarkRoast和Decaf,每种咖啡都有价格,可以设计一个抽象类 Beverage 作为父类,这三个咖啡去继承Beverage,代码如下。
Beverage.java
public abstract class Beverage {
public abstract double cost();
// other methods
}
HouseBlend.java
public class HouseBlend extends Beverage {
@Override
public double cost() {
return 5.0;
}
// other methods
}
DarkRoast 和 Decaf 类似。完成这些后,你又有了新的需求,给咖啡上加一些配料,比如soy和mocha等,不同的配料有不同的价格,应该怎么做呢?直觉的做法是直接继承,比如HouseBlend的咖啡就有HouseBlendWithSoy,HouseBlendWithMocha、HouseBlendWithSoyandMocha等子类。示例如下。
HouseBlendWithSoy.java
public class HouseBlendWithSoy extends HouseBlend {
@Override
public double cost() {
return super.cost()