在jdk流控制中,比较常用
package org.test.decorator;
public abstract class Beverage {
String desc = "hehe";
public String getDesc(){
return desc;
}
public abstract double cost();
}
package org.test.decorator;
public abstract class CondimentDecorator extends Beverage{
public abstract String getDesc();
}
package org.test.decorator;
public class Escpresso extends Beverage {
public Escpresso() {
desc = "excpresso ";
}
@Override
public double cost() {
return 1.99;
}
}
package org.test.decorator;
public class HouseBlend extends Beverage {
public HouseBlend() {
desc="houseblend ";
}
@Override
public double cost() {
// TODO Auto-generated method stub
return .99;
}
}
package org.test.decorator;
public class Milk extends CondimentDecorator {
Beverage beverage;
public Milk(Beverage beverage) {
this.beverage = beverage;
}
@Override
public String getDesc() {
return beverage.getDesc()+" milk,";
}
@Override
public double cost() {
return .10+beverage.cost();
}
}
package org.test.decorator;
public class Mocha extends CondimentDecorator {
Beverage beverage;
public Mocha(Beverage beverage) {
this.beverage = beverage;
}
@Override
public String getDesc() {
return beverage.getDesc()+" mocha,";
}
@Override
public double cost() {
return .20+beverage.cost();
}
}
package org.test.decorator;
public class Soy extends CondimentDecorator {
Beverage beverage;
public Soy(Beverage beverage) {
this.beverage = beverage;
}
@Override
public String getDesc() {
return beverage.getDesc()+" soy,";
}
@Override
public double cost() {
return .15+beverage.cost();
}
}
package org.test.decorator;
public class Demo {
public static void main(String[] args) {
Beverage beverage = new Escpresso();
System.out.println( beverage.getDesc() + " $"+beverage.cost());
beverage = new Mocha(beverage);
System.out.println( beverage.getDesc() + " $"+beverage.cost());
beverage = new Milk(beverage);
System.out.println( beverage.getDesc() + " $"+beverage.cost());
beverage = new Soy(beverage);
System.out.println( beverage.getDesc() + " $"+beverage.cost());
}
}