设计模式之Decorator(装饰者模式)
装饰者模式:装饰顾名思义就在原来的功能基础上加点装饰。
在java api中用到装饰者模式的最典型的就是IO流那部分了。
之前我的一篇文章中也用到装饰者模式:
http://skyuck.iteye.com/blog/781065
下面还是来用一个场景来描述吧:
很经典的一个场景就是咖啡的例子。例如我们喝咖啡一般有蓝山咖啡,拿铁咖啡等等。但是有时候我们去喝咖啡时需要加糖啊,咖啡也分为大杯,中杯,小杯。这样不同的咖啡价格就会不一样。
那么我们怎么去描述这些呢?
首先当然是我们的咖啡接口了
package com.unis.decorator;public class Test {public static void main(String[] args) { Coffee c = new LargeCoffee(new BlueMountainCoffee()); System.out.println(c.getInformation()); System.out.println(c.getPrice());}}观察Decorator类。这个类要实现Coffee接口。并且在这个类中要包含Coffee这个接口。 1 楼 zhaoxy_sunrain 2011-03-31 按照博主的写法写了下,发现一个好玩的问题。
我写了一个这样的测试类:
Coffee coffee = new SugarCoffee(new LargeCoffee(new LatteCoffee()));
int price = coffee.getPrice();
System.out.println(price);
这是一个加糖的大杯的拿铁咖啡;
那么再来一个,大杯的加糖的拿铁咖啡
Coffee coffee = new LargeCoffee(new SugarCoffee(new LatteCoffee()));
结果打印出来的价钱就不一样了,按照程序逻辑很好理解,但是怎么处理这种情况呢 2 楼 kfc_davy 2011-04-27 zhaoxy_sunrain 写道按照博主的写法写了下,发现一个好玩的问题。
我写了一个这样的测试类:
Coffee coffee = new SugarCoffee(new LargeCoffee(new LatteCoffee()));
int price = coffee.getPrice();
System.out.println(price);
这是一个加糖的大杯的拿铁咖啡;
那么再来一个,大杯的加糖的拿铁咖啡
Coffee coffee = new LargeCoffee(new SugarCoffee(new LatteCoffee()));
结果打印出来的价钱就不一样了,按照程序逻辑很好理解,但是怎么处理这种情况呢
一个是×一个是+。。