装饰者模式(Decorator Pattern) 详解2016-03-27 csdn博客 Spike_King
装饰者模式(Decorator Pattern):动态地将责任附加到对象上. 若要扩展功能, 装饰者提供了比继承更有弹性的替代方案.
使用方法:1. 首先创建
组件(Component)父类, 所有类,
具体组件(Concrete Component)和
装饰者(Decorator)都属于这一类型, 可以进行扩展;可以是
抽象类(abstract class), 也可以是
接口(interface);
代码:/** * @time 2014年5月23日 */package decorator;/** * @author C.L.Wang * */public abstract class Beverage {String description = "Unkown Beverage";public String getDescription() {return description;}public abstract double cost();}
2.
装饰者(Decorator)类父类, 继承
组件(component)父类, 但是
不要实现接口函数, 由它的
继承类(具体的装饰者)去实现,可以是
抽象类(abstract class), 也可以是
接口(interface);
代码:/** * @time 2014年5月23日 */package decorator;/** * @author C.L.Wang * */public abstract class CondimentDecorator extends Beverage {public abstract String getDescription();}
3.
具体组件(Concrete Component), 即装饰者(Decorator)需要装饰的
基础, 继承组件(Component)父类;
代码:/** * @time 2014年5月23日 */package decorator;/** * @author C.L.Wang * */public class DarkRoast extends Beverage {public DarkRoast() {description = "Dark Roast";}/* (non-Javadoc) * @see decorator.Beverage#cost() */@Overridepublic double cost() {// TODO Auto-generated method stubreturn 0.99;}}/** * @time 2014年5月23日 */package decorator;/** * @author C.L.Wang * */public class Decat extends Beverage {public Decat() {description = "Decat";}/* (non-Javadoc) * @see decorator.Beverage#cost() */@Overridepublic double cost() {// TODO Auto-generated method stubreturn 1.05;}}/** * @time 2014年5月23日 */package decorator;/** * @author C.L.Wang * */public class Espresso extends Beverage {public Espresso() {description = "Espresso";}/* (non-Javadoc) * @see decorator.Beverage#cost() */@Overridepublic double cost() {// TODO Auto-generated method stubreturn 1.99;}}/** * @time 2014年5月23日 */package decorator;/** * @author C.L.Wang * */public class HouseBlend extends Beverage {public HouseBlend() {description = "House Blend Coffee";}/* (non-Javadoc) * @see decorator.Beverage#cost() */@Overridepublic double cost() {// TODO Auto-generated method stubreturn .89;}}