首页 > 其他 > 详细

装饰器模式

时间:2016-08-19 11:22:31      阅读:270      评论: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
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!