装饰者模式,最简单的代码

装饰者模式,避免排列组合产生过多的子类,动态生成所需功能。

举例,你需要一杯黄豆豆浆,但分很多种类,你要加糖的,加红枣的,加花生的... 这就罢了,我要加糖的加红枣的 或者 加糖的加花生的 或者 三者都加的,如果设计所有子类会产生很多,所以就有了装饰者模式。

新建一个接口Soy,并定义抽象方法soyKind:

1 public interface Soy

2 {

3     public String soyKind();

4 }

新疆一个类 SoyImpl,实现Soy接口,必须实现soyKind()方法。这个是被装饰者,以这个为基础。

 1 public class SoyImpl implements Soy

 2 {

 3     @Override

 4     public String soyKind()

 5     {

 6         // TODO Auto-generated method stub

 7         System.out.println("基本豆浆种类,比如说以黄豆为基本原料的");

 8         return "黄豆豆浆";

 9     }

10 }

新建一个类Date,Date(枣),加枣的黄豆豆浆。

 1 //加红枣的豆浆  red dates红枣的意思

 2 public class Date implements Soy

 3 {

 4     private Soy soy;

 5 

 6     public Date(Soy soy)

 7     {

 8         this.soy = soy;

 9     }

10 

11     @Override

12     public String soyKind()

13     {

14         // TODO Auto-generated method stub

15         return soy.soyKind() + "带红枣";

16     }

17 }

新建一个类Sugar,加糖的黄豆豆浆。

 1 //加糖的豆浆 

 2 public class Sugar implements Soy

 3 {

 4     private Soy soy;

 5 

 6     public Sugar(Soy soy)

 7     {

 8         this.soy = soy;

 9     }

10 

11     @Override

12     public String soyKind()

13     {

14         // TODO Auto-generated method stub

15         return soy.soyKind() + "带糖";

16     }

17 }

新建测试类

 1 public class Test

 2 {

 3     public static void main(String[] args)

 4     {

 5         Soy soy=new SoyImpl();

 6         Soy soy2=new Sugar(soy);

 7         Soy soy3=new Date(soy2);

 8         System.out.println(soy3.soyKind());

 9     }

10 }

 

你可能感兴趣的:(装饰者模式)