设计模式 装饰者模式(二)

2014-11-23 22:54:36 · 作者: · 浏览: 2
mDecorator(IEquip equip) { this.equip = equip; } @Override public int caculateAttack() { return 15 + equip.caculateAttack(); } @Override public String description() { return equip.description() + + 红宝石; } }
好了,到此结束,我们已经实现了需求的功能了,是不是每个类都很清晰加简单,下面看测试:

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,是不是和我们的设计几乎一样~

好了,就到这里,编程也是很有乐趣的么~是吧,各位看官留个言、给个赞呗~

源码点击下载