装饰者模式

什么是装饰者模式

装饰者模式(Decorator Pattern 也称Wrapper Pattern)就是动态的把职责附加到已有对象上去,这种特性,使得装饰者模式提供了比继承更具有弹性的解决方案

装饰者模式类图

1 //抽象类Girl
2 public abstract class Girl {
3     String description="no particular";
4 
5     public String getDescription(){
6         return description;
7     }
8 }
1 //美国女孩
2 public class AmericanGirl extends Girl{
3     public AmericanGirl(){
4         description="+AmericanGirl";
5     }
6 }
1 //国产妹子
2 public class ChineseGirl extends Girl {
3     public ChineseGirl(){
4         description="+ChineseGirl";
5     }
6 }
1 //装饰者
2 public abstract class GirlDecorator extends Girl {
3     public abstract String getDescription();
4 }
 1 //给美国女孩加上金发
 2 public class GoldenHair extends GirlDecorator {
 3     private Girl girl;
 4 
 5     public GoldenHair(Girl g){
 6         girl=g;
 7     }
 8 
 9     @Override
10     public String getDescription() {
11         return girl.getDescription()+"+with golden hair";
12     }
13 
14 }
 1 //加上高挑的特性
 2 public class Tall extends GirlDecorator {
 3     private Girl girl;
 4 
 5     public Tall(Girl g){
 6         girl=g;
 7     }
 8 
 9     @Override
10     public String getDescription() {
11         return girl.getDescription()+"+is very tall";
12     }
13 
14 }
 1 //检验一下
 2 public class Test {
 3     public static void main(String[] args) {
 4         Girl g1=new AmericanGirl();
 5         System.out.println(g1.getDescription());
 6 
 7         GoldenHair g2=new GoldenHair(g1);
 8         System.out.println(g2.getDescription());
 9 
10         Tall g3=new Tall(g2);
11         System.out.println(g3.getDescription());
12     }
13 
14 }
15 /*
16 +AmericanGirl
17 +AmericanGirl+with golden hair
18 +AmericanGirl+with golden hair+is very tall
19  */

装饰者模式和适配器模式的区别 

1. 关于新职责:适配器也可以在转换时增加新的职责,但其主要的目的并不在此,而装饰者模式主要目的,就是给被装饰者增加新职责用的

2. 关于原接口:适配器模式是用新接口来调用原接口,原接口对新系统来说是不可见或者说不可用的,而装饰者模式原封不动的用原接口

3. 关于其包裹的对象:适配器是知道被适配者的详细情况的(就是那个类或那个接口),而装饰者只知道其接口是什么,至于其具体类型(是基类还是其他派生类)只有在运行期间才知道

posted @ 2018-05-11 14:40  sakura1027  阅读(110)  评论(0编辑  收藏  举报