package test;
/**
* 装饰者模式
* 典型应用:io
* 优点:防止类爆炸式增长
* @author fantasy
*
*/
public class DecoratorTest {
public static void main(String[] args) {
Water water = new Water();
SugarDecorator sd = new SugarDecorator(water);
MilkDecorator md = new MilkDecorator(sd);
System.out.println(md.description());
System.out.println(md.cost());
}
}
//被装饰者接口
interface Drink{
public String description();
public float cost();
}
//被装饰者具体实现类
class Water implements Drink{
@Override
public String description() {
return "纯净水";
}
@Override
public float cost() {
return 2.0f;
}
}
//装饰者抽象类
abstract class Decorator implements Drink{
private Drink drink;
public Decorator(Drink drink){
this.drink = drink;
}
public String description(){
return drink.description();
}
public float cost(){
return drink.cost();
}
}
//具体的糖装饰者--SugarDecorator
class SugarDecorator extends Decorator{
public SugarDecorator(Drink drink) {
super(drink);
}
public String description(){
return super.description()+"+sugar";
}
public float cost(){
return super.cost()+1.0f;
}
}
//具体的牛奶装饰者--MilkDecorator
class MilkDecorator extends Decorator{
public MilkDecorator(Drink drink) {
super(drink);
}
public String description(){
return super.description()+"+milk";
}
public float cost(){
return super.cost()+2.0f;
}
}