Welcome

首页 / 软件开发 / 数据结构与算法 / 装饰者模式(Decorator Pattern) 详解

装饰者模式(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;}}