设计模式之—装饰者


/**

 *
 * 转载请标明出处:http://blog.csdn.net/u013598111/article/details/50196897

 *   @author:【JunTao_sun】
 *
 *
*/


在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,

也就是装饰来包裹真实的对象。

至少需要两个类 和一个接口。

一个是被装饰的类   另一个是装饰类,两个类都实现同样的接口。

下面代码 以游戏里的装备 属性加成   做演示。

<span style="font-size:18px;"><span style="font-family:arial;color:#333333;"><span style="line-height: 20px;">/**
 * 武器的接口
 * @author WJT
 *
 */
public interface WeaponI {
	// 防御
	int defend();

	// 攻击
	int attack();

}</span></span></span>
下边是实现武器的两个类 

/**
 * 黑色切割者   实现了武器接口(被装饰的类)
 */
class HeiQue implements WeaponI {

	@Override
	public int defend() {
		// TODO Auto-generated method stub
		return 50;
	}

	@Override
	public int attack() {
		// TODO Auto-generated method stub
		return 45;
	}

/**
 *饮血剑 实现了武器接口(被装饰的类)
 *
 */
class YinXueJian implements WeaponI {

		@Override
		public int defend() {
			// TODO Auto-generated method stub
			return 20;
		}

		@Override
		public int attack() {
			// TODO Auto-generated method stub
			return 35;
		}

	}

重点来了 装饰者接口,DecorateWeaponI继承武器接口,

也可以直接用装饰者类实现武器接口。

 //装饰者接口
public interface  DecorateWeaponI  extends WeaponI{

	
	
}

/**
 * 
 *女妖面纱  装饰类 继承接口
 */
class NvYaoDecorator implements DecorateWeaponI {
	private WeaponI w;

     //初始化实现武器接口的类 被装饰作用
	public NvYaoDecorator(WeaponI w) {

		this.w = w;
	

	}

	@Override
	public int defend() {
	
		return 10+w.defend();
	}

	@Override
	public int attack() {
		
		return 10 + w.attack();
	}


}

/**
 *兰顿之兆  装饰类
 *
 */
public class LanDunDecorator implements DecorateWeaponI {
	
	private WeaponI w;

     //获得被装饰的武器
	public LanDunDecorator(WeaponI w) {
		this.w = w;
	
	}

	@Override
	public int defend() {
		// TODO Auto-generated method stub
		return 15 + w.defend();
	}

	@Override
	public int attack() {
		// TODO Auto-generated method stub
		return 10+w.attack();
	}


}

完成(常见IO流--- 装饰者模式应用),测试代码:

	public static void main(String[] args) {
		  
		// 兰顿之兆+女妖面纱+黑色切割者
		WeaponI weapon=new LanDunDecorator(new NvYaoDecorator(new HeiQue()));
		System.out.print("武器攻击是"+weapon.attack()+"武器防御是"+weapon.defend());
		
	}
武器属性:攻击是65武器防御是75

手持武器 有点单薄  -  -

再另加两件防装(真想来只赤兔6666)

属性大大提升   可以越塔了 LOL。






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值