>楼上的好像这不是Decorator模式
通常Decorator具备跟原来的接口一样的方法,
只是在做接口方法的前面可以做一些其他的事情。
上面的代码我随便写的,只是表示下意思,并没跟着banq的代码来.上面的Decorator类当然是CoffeeImp行为接口的子类了,也当然具备原来的接口一样的方法,Decorator类还具备父类没有的add方法,remove方法,clear方法和get方法.add方法的参数类型也是CoffeeImp,参数植是行为的具体实例,比如milkCoffeeImp等等!
我上面代码:
decorator.add("加糖");
decorator.add("加牛奶");
参数类型是String类型,只是表示下意思,实际上参数类型应该是CoffeeImp.
get方法返回List.
需要注意的是:不应该把"什么也没加"看成一种行为,而应该看成一种状态.只有两种状态:"加了东西"(糖,牛奶等等!)和"什么都没有加"!
pourCoffee方法应该加上一个判断:
if(impList.size==0){
System.out.println("什么也没加,清香!");
}
上面都是我的愚见,不足之处请大虾们提出!
关于Decorator(油漆工)的介绍在下面的网页上有http://www.jdon.com/designpatterns/decorator.htm