标签:
设计一个小游戏 游戏中很多的角色(角色包括: 枪手Gunmen,刀客swordsman等), 角色拥有武器,武器包括(刀knife(150),枪gun(200),棍(100)),
游戏中我们可以通过给武器加上一些宝石(蓝宝石,红宝石,绿宝石) 来加强武器的攻击力。
红宝石每增加一颗 攻击力 +5;ruby
蓝宝石每增加一颗 攻击力+10;sapphire
绿宝石每增加一颗 攻击力 +20
首先还是先创建两个接口;
1 package ooad.design.Decorator; 2 3 public interface IWeapon { 4 public String getName(); 5 public int getAttack(); 6 }
1 package ooad.design.Decorator; 2 3 public interface IRole { 4 public void attack(IWeapon weapon); 5 6 }
接着我们创建武器:
1 package ooad.design.Decorator; 2 3 public class Gun implements IWeapon { 4 private String name; 5 6 7 public Gun(String name) { 8 super(); 9 this.name = name; 10 } 11 12 @Override 13 public String getName() { 14 15 return this.name; 16 } 17 18 @Override 19 public int getAttack() { 20 21 return 200; 22 } 23 24 25 26 }
然后我们创建角色:
1 package ooad.design.Decorator; 2 3 public class Gunmen implements IRole { 4 private String name; 5 6 7 public Gunmen(String name) { 8 super(); 9 this.name = name; 10 } 11 public String getName() { 12 return name; 13 } 14 15 16 public void setName(String name) { 17 this.name = name; 18 } 19 20 21 @Override 22 public void attack(IWeapon weapon) { 23 System.out.println(this.name+"使用"+weapon.getName()+"进行攻击,造成的伤害值为:"+weapon.getAttack()); 24 } 25 26 }
因为武器需要宝石来装饰,所以呢我们创建一个装饰的抽象类
1 package ooad.design.Decorator; 2 3 public abstract class Decorator implements IWeapon{ 4 public abstract int getAttack(); 5 6 }
宝石类:
1 package ooad.design.Decorator; 2 3 public class Ruby extends Decorator { 4 private IWeapon weapon; 5 6 public Ruby(IWeapon weapon) { 7 super(); 8 this.weapon = weapon; 9 } 10 11 @Override 12 public String getName() { 13 14 return "增加了红宝石的"+weapon.getName(); 15 } 16 17 @Override 18 public int getAttack() { 19 20 return 5+weapon.getAttack(); 21 } 22 23 }
来个测试:
1 package ooad.design.Decorator; 2 3 public class Test { 4 5 public static void main(String[] args) { 6 IRole r =new Gunmen("枪手"); 7 IWeapon w=new Gun("火箭枪"); 8 r.attack(w); 9 w=new Ruby(w); 10 r.attack(w); 11 } 12 13 }
最终结果:
枪手使用火箭枪进行攻击,造成的伤害值为:200
枪手使用增加了红宝石的火箭枪进行攻击,造成的伤害值为:205
如果想要用两颗红宝石我们就可以这样:
r.attack(w);
r.attack(w);
结果呢则是:
枪手使用火箭枪进行攻击,造成的伤害值为:200
枪手使用增加了红宝石的增加了红宝石的火箭枪进行攻击,造成的伤害值为:210
增加了红宝石的增加了红宝石的 这样看起来不舒服吧,该怎样去判断他到底增加了几颗宝石,我们就显示几颗宝石呢?
例子中的角色,武器,装饰的宝石,我就没有全部写出来了!
标签:
原文地址:http://www.cnblogs.com/hellokitty1/p/4654127.html