类图 代码 使用装饰模式来简单实现游戏中的装备附魔系统 类图 武器接口中有2个方法,第一个方法是获取武器的伤害,另一个方法是获取武器的名字。我们知道一般附魔的武器的名字都会在武器前面加一个定冠词,例如:"木剑" ===> "燃烧的木剑",这里装饰器也采用类似的方法,返回对应的名字。在装饰器(附魔接口)中,增加一个方法,是附魔对应的特殊效果,这里我定义火附魔是增加10%的伤害。 代码 //weapon.cs using UnityEngine; using System.Collections; public interface weapon { float getDamage(); string getName(); } //concreteWeapon public class woodSword : weapon{ private float damage = 1; private string name = "Wood Sword"; public float getDamage() { return damage; } public string getName() { return name; } } //decorator public interface enchant : weapon { void getExtraEffect(); } //concreteDecorator public class fireEnchant : enchant { private float fireExtraDamage = 0.1f; private string name = "glow"; private float extraDamage; private weapon wp; public fireEnchant(weapon w) { wp = w; getExtraEffect(); } public float getDamage() { return extraDamage + wp.getDamage(); } public string getName() { return name + " " + wp.getName(); } public void getExtraEffect() { extraDamage = wp.getDamage() * fireExtraDamage; } } //test.cs using UnityEngine; using System.Collections; public class test : MonoBehaviour { weapon myWeapon; void Start () { weapon w = new woodSword(); Debug.Log(w.getName() + " damage is : " + w.getDamage()); myWeapon = new fireEnchant(w); Debug.Log(myWeapon.getName() + " damage is : " + myWeapon.getDamage()); } } 把test.cs挂载在一个空对象上,执行,效果如下: 1 FIN 2016.7.25/17.03 ← Previous Post Next Post →