码迷,mamicode.com
首页 > 其他好文 > 详细

装饰器模式

时间:2016-08-19 11:23:31      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:

装饰模式使用被装饰类的一个子类的实例,把客户端的调用委派到被装饰类,装饰模式的关键在于这种扩展是完全透明的。

/**

 * 装饰器模式,(装饰者和被装饰者的类型必须是一样的,拥有相同的超类或者相同的接口)

 */

public abstract class Beverage {

    protected String description = "unknow beverage";

    

    public String getDescription() {

        return description;

    }

    

    public abstract double cost();

}

//装饰者

public abstract class CondimentDecorator extends Beverage {

    public abstract String getDescription();

}

//被装饰者实现类

public class HouseBlend extends Beverage {

    

    public HouseBlend() {

        description = "House Blend Coffee";

    }

    

    @Override

    public double cost() {

        return 0.89;

    }

}

//装饰者实现类

public class Mocha extends CondimentDecorator {

    private Beverage beverage;

    

    public Mocha(Beverage beverage) {

        this.beverage = beverage;

    }

    

    @Override

    public String getDescription() {

        return beverage.getDescription() + ", Mocha";

    }

 

    @Override

    public double cost() {

        return 0.20 + beverage.cost();

    }

}

//又一装饰者实现类

public class Whip extends CondimentDecorator {

    private Beverage beverage;

    

    public Whip(Beverage beverage) {

        this.beverage = beverage;

    }

    

    @Override

    public String getDescription() {

        return beverage.getDescription() + ", Whip";

    }

 

    @Override

    public double cost() {

        return 0.10 + beverage.cost();

    }

}

//测试类

public class Test {

    public static void main(String[] args) {

        Beverage beverage = new HouseBlend();

        System.out.println(beverage.getDescription() + "\t" + beverage.cost());

        

        Beverage beverage1 = new HouseBlend();

        beverage1 = new Mocha(beverage1);

        beverage1 = new Whip(beverage1);

        System.out.println(beverage1.getDescription() + "\t" + beverage1.cost());

    }

}

//结果:

House Blend Coffee 0.89

House Blend Coffee, Mocha, Whip 1.1900000000000002

装饰器模式

标签:

原文地址:http://www.cnblogs.com/fanguangdexiaoyuer/p/5786820.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!