DP-装饰模式代码详解
装饰者模式: 给对象动态的附件额外的责任。对于扩展功能,除了子类化之外,装饰者提供了弹性的替代做法
代码实现如下:
package com.designpatterns.decorator;/*** 1.定义抽象类*/
public abstract class Beverage {String description="unknow Beverage";public String getDescription(){return description;}public abstract double cost();
}
package com.designpatterns.decorator;/*** 2.定义装饰者抽象类** 装饰者包裹抽象类*/
public abstract class CondimentDecorator extends Beverage{Beverage beverage;public abstract String getDescription();//重新实现getDescription
}
package com.designpatterns.decorator;/*** 3.定义抽象类实现* Espresso(浓缩咖啡)*/
public class Espresso extends Beverage{public Espresso(){super.description="Espresso";}@Overridepublic double cost() {return 1.99;}
}package com.designpatterns.decorator;/*** 3.定义抽象类实现*/
public class HouseBlend extends Beverage{public HouseBlend(){description="House Blend Coffee";}@Overridepublic double cost() {return 0.89;}
}
package com.designpatterns.decorator;/*** 4.定义装饰者实现类*/
public class Mocha extends CondimentDecorator{public Mocha(Beverage beverage){this.beverage=beverage;}@Overridepublic String getDescription() {return beverage.getDescription()+",Mocha";}@Overridepublic double cost() {return beverage.cost()+.20;}
}
package com.designpatterns.decorator;/***5. 装饰模式测试*/
public class StarBuzzCoffeeTest {public static void main(String[] args) {Beverage beverage=new Espresso();System.out.println(beverage.description+" $"+beverage.cost());Beverage beverage2=new HouseBlend();System.out.println(beverage2.description+" $"+beverage2.cost());CondimentDecorator decorator=new Mocha(beverage);System.out.println(decorator.description+" $"+decorator.cost());CondimentDecorator decorator2=new Mocha(beverage2);System.out.println(decorator2.description+" $"+decorator2.cost());}
}