好了,到此结束,我们已经实现了需求的功能了,是不是每个类都很清晰加简单,下面看测试:
package com.zhy.pattern.decorator;
public class Test
{
public static void main(String[] args)
{
// 一个镶嵌2颗红宝石,1颗蓝宝石的靴子
System.out.println( 一个镶嵌2颗红宝石,1颗蓝宝石的靴子);
IEquip equip = new RedGemDecorator(new RedGemDecorator(new BlueGemDecorator(new ShoeEquip())));
System.out.println(攻击力 : + equip.caculateAttack());
System.out.println(描述 : + equip.description());
System.out.println(-------);
// 一个镶嵌1颗红宝石,1颗蓝宝石的武器
System.out.println( 一个镶嵌1颗红宝石,1颗蓝宝石,1颗黄宝石的武器);
equip = new RedGemDecorator(new BlueGemDecorator(new YellowGemDecorator(new ArmEquip())));
System.out.println(攻击力 : + equip.caculateAttack());
System.out.println(描述 : + equip.description());
System.out.println(-------);
}
}
输出:
一个镶嵌2颗红宝石,1颗蓝宝石的靴子 攻击力 : 40 描述 :圣战靴子+ 蓝宝石+ 红宝石+ 红宝石 ------- 一个镶嵌1颗红宝石,1颗蓝宝石,1颗黄宝石的武器 攻击力 : 50 描述 :屠龙刀+ 黄宝石+ 蓝宝石+ 红宝石 -------
赞不赞,要是需求随便多几个装备,几种宝石,我们随随便便就可以加上,然后开开心心下班。
好了,恭喜你,你又学会了一个设计模式,装饰者模式。
现在根据例子对定义的理解,不用我多说吧。
Java的API中也有装饰者模式的身影,如果你初学Java,一定记得Java里面的各种流,很痛苦吧,但是当你明
白你们的设计之后就会感觉清晰很多。

把InputStream看作我们的IEquip,把FilterInputStream看作我们的IEquipDecorator,是不是和我们的设计几乎一样~
好了,就到这里,编程也是很有乐趣的么~是吧,各位看官留个言、给个赞呗~
源码点击下载