Java装饰器模式详解

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() 

你可能感兴趣的:(设计模式,设计模式)