装饰者模式

2023-04-12  本文已影响0人  sakura_L

简介

用途

应用场景

代码

以下为动态给coffee添加属性的代码,通过给接口不添加装饰者实现更多的功能
public class Test {

    public static void main(String[] args) throws IOException, XMLParserException, InvalidConfigurationException, SQLException, InterruptedException {
        Coffee coffee = new SimpleCoffee();
        coffee = new Milk(coffee);
        coffee = new Sugar(coffee);
        System.out.println(coffee.getCost());
        System.out.println(coffee.getDescription());

    }

}
// 定义咖啡接口
interface Coffee {
    double getCost();
    String getDescription();
}

// 实现简单的咖啡类
class SimpleCoffee implements Coffee {
    @Override
    public double getCost() {
        return 1.0;
    }

    @Override
    public String getDescription() {
        return "Simple coffee";
    }
}

// 定义装饰者类
abstract class CoffeeDecorator implements Coffee {
    protected Coffee decoratedCoffee;

    public CoffeeDecorator(Coffee coffee) {
        this.decoratedCoffee = coffee;
    }

    public double getCost() {
        return decoratedCoffee.getCost();
    }

    public String getDescription() {
        return decoratedCoffee.getDescription();
    }
}

// 实现具体的装饰者类:牛奶
class Milk extends CoffeeDecorator {
    public Milk(Coffee coffee) {
        super(coffee);
    }

    public double getCost() {
        return super.getCost() + 0.5;
    }

    public String getDescription() {
        return super.getDescription() + ", milk";
    }
}

// 实现具体的装饰者类:糖
class Sugar extends CoffeeDecorator {
    public Sugar(Coffee coffee) {
        super(coffee);
    }

    public double getCost() {
        return super.getCost() + 0.2;
    }

    public String getDescription() {
        return super.getDescription() + ", sugar";
    }

}
上一篇 下一篇

猜你喜欢

热点阅读