装饰者模式

关于装饰者模式:

装饰者和被装饰对象有相同的超类型;

你可以用一个或者多个装饰者包装一个对象;

既然装饰者和被装饰对象有相同的超类型,所以在任何需要原始对象的场合,可以用装饰过的对象代替它;

装饰者可以在所委托被装饰者的行为之前与/或之后,加上自己的行为以达到特定的目的;

对象可以在任何时候被装饰,所以可以在运行时动态地,不限量地使用你喜欢的装饰者来装饰对象。


装饰者模式的说明:

动态的将责任附加到对象上,若要扩展功能,装饰者提供了比继承更有弹性的替代方案。


举个例子:

星巴克的咖啡和调料:星巴克有多种咖啡,每种咖啡可以加上各种不同的调料,如何计算价钱又方便以后扩展。


类:

public abstract class Beverage {
    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 Espresso extends Beverage {
    public Espresso(){
        description = "Espresso";
    }
    public double cost()
    {
        return 1.09;
    }

}

类:


public class HouseBlend extends Beverage{
    public HouseBlend(){
        description ="House Blend Coffee";
    }
    public double cost(){
        return .89;
    }

}

类:


public class Mocha extends CondimentDecorator{
    Beverage beverage;
    public Mocha(Beverage beverage){
        this.beverage = beverage;
    }
    public String getDescription(){
        return beverage.getDescription()+",Mocha";
    }
    public double cost(){
        return .20+beverage.cost();
    }

}
省略一些实现。

测试类:


public class StarbuzzCoffee {
    public static void main(String args[])
    {
        Beverage beverage = new Espresso();
        beverage = new Mocha(beverage);
        beverage = new Mocha(beverage);
        System.out.println(beverage.getDescription()+"$"+beverage.cost());

    }

}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

惹不起的程咬金

来都来了,不赏点银子么

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值