三.定义出制作面包的抽象类
  抽象类实现了IBread这个制作面包的接口,同时包含IBread接口的实例
  对应上述的第2个注意点:装饰者类内有一个真实对象的引用
1 package 装饰模式;
2
3 public abstract class AbstractBread implements IBread {
4
5     private final IBread bread;
6
7     public AbstractBread(IBread bread) {
8         super();
9         this.bread = bread;
10     }
11     @Override
12     public void prepair() {
13         this.bread.prepair();
14     }
15     @Override
16     public void kneadFlour() {
17         this.bread.kneadFlour();
18     }
19     @Override
20     public void steamed() {
21         this.bread.steamed();
22     }
23
24     @Override
25     public void process() {
26         prepair();
27         kneadFlour();
28         steamed();
29     }
30
31 }
  四.生产有着色剂的"玉米馒头"
  继承AbstarctBread类,所以可以有选择的覆盖正常生产馒头的方法,并添加原有方法原来的信息,同时也可以添加自己的方法
  装饰者模式中这里关键,
  对应上述的第1个注意点:装饰者类要实现真实类同样的接口
1 package 装饰模式;
2
3 public class CornDecorator extends AbstractBread{
4
5     public CornDecorator(IBread bread) {
6
7         super(bread);
8     }
9
10     public void paint(){
11
12         System.out.println("添加柠檬黄的着色剂");
13     }
14     @Override
15     public void kneadFlour() {
16         //添加着色剂后和面
17         this.paint();
18         super.kneadFlour();
19     }
20
21
22 }
  五.生产有甜蜜素的"甜馒头"
  实现与第四部一样
1 package 装饰模式;
2
3 public class SweetDecorator extends AbstractBread {
4
5     public SweetDecorator(IBread bread) {
6
7         super(bread);
8     }
9
10     public void paint(){
11
12         System.out.println("添加甜蜜素...");
13     }
14
15     @Override
16     public void kneadFlour() {
17         //添加甜蜜素后和面
18         this.paint();
19         super.kneadFlour();
20     }
21
22 }