//基础玩家类 public interface BasePlayer { int GetHp(); }
//基础装饰类,同样是继承基础玩家类 public class BaseDecorator : BasePlayer { private BasePlayer player; public BaseDecorator(BasePlayer b) { player = b; } public virtual int GetHp() { return player.GetHp(); } }
public class APlayer : BasePlayer { public int GetHp() { return 200; } }
public class KuziDress:BaseDecorator { public KuziDress(BasePlayer b) : base(b) { } public override int GetHp() { //穿上裤子装备后的血量 return base.GetHp() + 100; } }
public class YiFuDress : BaseDecorator { public YiFuDress(BasePlayer b) : base(b) { } public override int GetHp() { return base.GetHp() + 50; } }
using UnityEngine; public class testDress : MonoBehaviour { void Start () { BasePlayer player = new APlayer(); player = new KuziDress(player); player = new YiFuDress(player); Debug.Log(player.GetHp()); } }
如果装饰很多就需要创建很多很多的装饰类,而且,玩家Player他自己都不知道自己穿了多少个装饰。