装饰者模式(3)

装饰者模式定义:动态的将新功能附加到对象上。在对象功能扩展方面,它比继承更有弹性。


现实中,装饰者模式就像一个快递。我们购买的东西,需要经过一层一层的包裹,确保稳妥之后才被寄出。如果按照传统的面向对象,每包裹一层就需要设计一个新类,这将会导致类爆炸。还有一个例子就是,我们所喝的咖啡,假设有N种调料,M中原始咖啡豆,它们组合成的咖啡无数种,很明显,我们不可能为每种可能都建立一个类。

这时候就会使用到装饰者模式。

就如同JAVA里面输入输出流。可以去参考api

http://tool.oschina.net/apidocs/apidoc?api=jdk-zh

 


所谓装饰者模式就是,所有子类实现同一接口,且子类都拥有一个接口对象的字段。当一层层装饰之后,调用最终的对象时,则会一层层递归执行相应的方法。(注意递归一词)


代码示例如下:

1
2
3
4
5
6
7
8
//剑接口
public  abstract  class  SwordDecored {
     
     protected  SwordDecored swordDecored;
     
     public  abstract  String hurt();
 
}


1
2
3
4
5
6
7
public  class  DrinkBloodSword  extends  SwordDecored {
 
     @Override
     public  String hurt() {
         return  "---饮血剑造成100点伤害" ;
     }
}


1
2
3
4
5
6
7
8
9
10
11
public  class  BlackFlameSword  extends  SwordDecored {
 
     public  BlackFlameSword(SwordDecored swordDecored) {
         super .swordDecored = swordDecored;
     }
 
     @Override
     public  String hurt() {
         return  "----黑火造成200点伤害" +swordDecored.hurt();
     }
}


1
2
3
4
5
6
7
8
9
10
11
public  class  Main {
 
     public  static  void  main(String[] args) {
         DrinkBloodSword drinkBloodSword =  new  DrinkBloodSword();
         System.out.println( "获得饮血剑,并攻击" );
         System.out.println(drinkBloodSword.hurt());
         BlackFlameSword blackFlameSword =  new  BlackFlameSword(drinkBloodSword);
         System.out.println( "给饮血剑镶嵌黑炎剑气石,并攻击" );
         System.out.println(blackFlameSword.hurt());
     }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值