Decorator装饰器模式Java示例学习

使用小时候玩的游戏坦克大战来模拟设计模式的应用

出生时坦克子弹不能穿墙,血量只够挨打1次,

吃了随机出现的道具后血量会够挨打多次,子弹威力也变大,等于加了装饰

首先是创建通用的坦克:

public abstract class Tank
{

	public int hp;

	public abstract void attack();

	public int beAttacked(int i)
	{
		return hp -= i * 100;
	};
}


然后是对这个通用坦克的变身器:

public abstract class BianshenTank extends Tank
{
	private Tank tank;

	public BianshenTank(Tank tank)
	{
		this.tank = tank;
	}

	@Override
	public void attack()
	{
		tank.attack();
	}

	@Override
	public int beAttacked(int i)
	{
		return tank.beAttacked(i);
	}
}


创建出生时的默认坦克,未加装饰:

public class BornTank extends Tank
{
	public BornTank()
	{
		this.hp = 100;
	}

	@Override
	public void attack()
	{
		System.out.println("bing! beng! ba!");
	}

	@Override
	public int beAttacked(int i)
	{
		return hp -= i * 100;
	}

}


加了装饰的坦克,无敌还能穿墙:

public class Wudi extends BianshenTank
{
	public Wudi(Tank tank)
	{
		super(tank);
		hp = 300;
	}

	@Override
	public void attack()
	{
		super.attack();
		System.out.println("haha, i can chuanqiang");
	}

	@Override
	public int beAttacked(int i)
	{
		System.out.println("haha, i am wudi");
		return hp;
	}
}


然后下面就可以使用这个无敌坦克:

Tank t = new BornTank();
Wudi w = new Wudi(t);
w.attack();
System.out.println("my hp is:" + w.beAttacked(200));


 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值