就是用来装饰别的类的,可以理解成 加油添醋(或锦上添花····)
就像人一样,人就是原来的类,每一个装饰类就如一件件的衣服,可以根据需求随意组合的穿到人的身上。
例子:
面条,可以是牛肉面、瘦肉面、·····等等,
转换成java代码就是:
面条 --- 抽象类 Noodle;
牛肉面 ---- BeefNoodles;
瘦肉面 ---- MeatNoodles;
```````````这样就会有各种各样的面条的具体类了,
关键不是数量的问题,假如有一个 加鸡蛋的牛肉面呢? 再新建一个 BeefAndEggNoodles?
那么,如果顾客的要求更多一点呢 加蛋加香肠的牛肉面呢·······················
应该怎么办呢,其实我们应该分清楚主次,很明显这里主体是牛肉面/瘦肉面,装饰的是配料(什么鸡蛋,香肠,香菜等·····),
而且这些配料还有可能随意组合的,所以按配料来定义一个面条对象是不理智的。
首先,先创建一个Noodle抽象类,这个没问题吧:
1 package design.patterns.decorator; 2 3 public abstract class Noodle { 4 //描述,说明这是什么面 5 public String description; 6 7 public String getDescription(){ 8 return description; 9 } 10 11 //吃后感 12 public abstract String feeling(); 13 }