装饰者设计模式

来源:互联网 发布:微专业麻瓜python编程 编辑:程序博客网 时间:2024/05/18 11:25

       装饰者模式用来动态的给一个对象添加一些额外的职责。我们可以通过对一些功能的不同组合方式来创建不同的类,在这种情况下,使用装饰者设计模式是非常灵活且便捷的。


装饰者设计模式有四大角色:

(1) 抽象构建角色:定义一个抽象接口,来规范准备附加功能的类。
(2) 具体构建角色:将要被附加功能的类实现抽象构建角色接口。
(3) 抽象装饰者角色:持有对具体构建角色的引用并定义与抽象构建角色一致的接口。
(4) 具体装饰角色:实现抽象装饰者角色。负责为具体构建添加额外功能。

案列实现,需求是提供不同种类的咖啡,如加糖、加奶、加冰、加糖加奶等等,这些元素就是需要添加的额外功能。

先建立一个基础接口

/* * 创建基类接口Coffee,装饰者和被装饰者要实现这个接口 */public interface Coffee {String drink();}

再建立一个需要被装饰的基础类
/* * 具体构建角色,也就是被装饰的类 */public class BlackCoffee implements Coffee{@Overridepublic String drink() {return "纯咖啡";}}


再建立一个抽象装饰者角色
/* * 抽象装饰者角色,持有具体构建者的引用 */public class Decorator implements Coffee{private Coffee coffee;public Decorator(Coffee coffee){this.coffee = coffee;}@Overridepublic String drink() {return coffee.drink();}}

两个具体的装饰功能类
/* * 具体装饰角色,实现增强的功能 */public class MilkBlackCoffee extends Decorator{public MilkBlackCoffee(Coffee coffee){super(coffee);}@Overridepublic String drink() {return super.drink()+"加奶";}}
/* * 具体装饰角色,实现增强的功能 */public class SugarBlackCoffee extends Decorator{public SugarBlackCoffee(Coffee coffee){super(coffee);}@Overridepublic String drink() {return super.drink()+"加糖";}}


通过不同功能之间的对象传递,就可以实现功能的叠加。