装饰者模式(decorator)完全解析
2016-11-07 15:31
351 查看
先看一下装饰者模式的UML图:
装饰模式到底是什么呢?举个简单的例子来说明,现在有一杯白开水(WaterClass),想向白开水里面加茶叶(TeaClass),加点糖(SugarClass),或者加点盐(SaltClass)。也许会认为那还不简单吗,加茶叶的白开水就再生成一个(WaterWithTeaClass),加糖的白开水就再生成一个(WaterWithSugarClass)这样不就行了吗?但是如果我们既要加糖又要加茶叶,或者加盐加糖这样的组合会很多,可能就要生成很多的类,造成类泛滥。这时候就要用到装饰者模式了。下面看看装饰者模式是如何轻松解决这个问题的。
还是先给出UML图便于理解:
DrinkDecorator:
WaterComponent:
DrinkDecorator:
SugarDecorator:
TeaDecorator:
MainClass:
有这个向白开水里面加配料的方法很容易让我们理解装饰者模式是怎样实现的。
装饰模式到底是什么呢?举个简单的例子来说明,现在有一杯白开水(WaterClass),想向白开水里面加茶叶(TeaClass),加点糖(SugarClass),或者加点盐(SaltClass)。也许会认为那还不简单吗,加茶叶的白开水就再生成一个(WaterWithTeaClass),加糖的白开水就再生成一个(WaterWithSugarClass)这样不就行了吗?但是如果我们既要加糖又要加茶叶,或者加盐加糖这样的组合会很多,可能就要生成很多的类,造成类泛滥。这时候就要用到装饰者模式了。下面看看装饰者模式是如何轻松解决这个问题的。
还是先给出UML图便于理解:
DrinkDecorator:
public class DrinkDecorator implements DrinkComponent{ DrinkComponent component; public DrinkDecorator(DrinkComponent component) { super(); this.component = component; } @Override public void operation() { // TODO Auto-generated method stub } }
WaterComponent:
public class WaterComponent implements DrinkComponent{ @Override public void operation() { // TODO Auto-generated method stub System.out.print("water drink"); } }
DrinkDecorator:
public class DrinkDecorator implements DrinkComponent{ DrinkComponent component; public DrinkDecorator(DrinkComponent component) { super(); this.component = component; } @Override public void operation() { // TODO Auto-generated method stub } }
SugarDecorator:
public class SugarDecorator extends DrinkDecorator{ public SugarDecorator(DrinkComponent component) { super(component); // TODO Auto-generated constructor stub } public void operation() { component.operation(); System.out.print(",with sugar"); } }
TeaDecorator:
public class TeaDecorator extends DrinkDecorator{ public TeaDecorator(DrinkComponent component) { super(component); // TODO Auto-generated constructor stub } public void operation() { component.operation(); System.out.print(",with Tea"); } }
MainClass:
public class MainClass { public static void main(String[] args) { // TODO Auto-generated method stub WaterComponent water=new WaterComponent(); SugarDecorator sugar=new SugarDecorator(water); //往白开水里面加糖。 TeaDecorator tea=new TeaDecorator(sugar); //往加糖的白开水里面加茶叶。 tea.operation(); /*一杯有茶叶和糖的白开水就这样产生了,你也可以自由的往白开水里面加自己喜欢的东西,而并不造成类泛滥只需要继承DrinkDecorator就行*/ } }
有这个向白开水里面加配料的方法很容易让我们理解装饰者模式是怎样实现的。
相关文章推荐
- 设计模式示例二 Decorator(装饰者)
- 设计模式示例二 Decorator(装饰者)
- 《Head First Design Patterns》笔记三:装饰者模式(Decorator Pattern)
- Net设计模式实例之装饰者模式(Decorator Pattern)(1)
- Net设计模式实例之装饰者模式(Decorator Pattern)
- 设计模式与泡mm的关系之Decorator装饰者设计模式及装饰者设计模式的再思考
- 设计模式之Decorator(装饰者)
- Decorator 装饰者模式
- Javascript乱弹设计模式系列(3) - 装饰者模式(Decorator)
- 单例模式完全解析
- 设计模式随笔系列:来杯咖啡-装饰者模式(Decorator)[转]
- 设计模式循序渐进(2)装饰者模式 Decorator
- 设计模式学习3——装饰者模式(Decorator)
- 单例模式完全解析
- 装饰者模式(Decorator pattern)
- 常见设计模式的解析和实现(C++)之九-Decorator模式
- 用装饰者(Decorator)模式添加功能
- 装饰者模式 The Decorator Pattern
- 也谈设计模式,实例票据打印 解析 Decorator
- 设计模式之Decorator(装饰者模式)