赞
踩
装饰者模式动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。
public abstract class Beverage {
public String description = "Unknown Beverage";
public String getDescription() {
return description;
}
public abstract double cost();
}
public abstract class CondimentDecorator extends Beverage {
public abstract String getDescription();
}
public class Espresso extends Beverage {
public Espresso() {
description = "Espresso";
}
@Override
public double cost() {
return 1.99;
}
}
public class Mocha extends CondimentDecorator { Beverage beverage; public Mocha(Beverage beverage) { this.beverage = beverage; } @Override public double cost() { return .20 + beverage.cost(); } @Override public String getDescription() { return beverage.getDescription() + ", Mocha"; } }
public class StarbuzzCoffee {
public static void main(String[] args) {
Beverage beverage = new Espresso();
System.out.println(beverage.getDescription() + " $" + beverage.cost());
Beverage beverage1 = new HouseBlend();
beverage1 = new Mocha(beverage1);
beverage1 = new Mocha(beverage1);
System.out.println(beverage1.getDescription() + " $" + beverage1.cost());
}
}
Espresso $1.99
House Blend Coffee, Mocha, Mocha $1.29
Java可以使用抽象类和接口来实现装饰者模式,通过继承和组合的方式来给对象增加新的功能。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。