場景:遊戲修改器
描述:角色的級别太低,技能也弱,但關卡難度太大。往往一上來來不及回血,或遊戲設定回血太慢。這裡用遊戲修改器。
(一)角色
public abstract class Role
{
public string Name { get; set; }
public int MP { get; set; }
public int HP { get; set; }
public abstract void RestoreMP();
public abstract void RestoreHP();
}
系統預設的回藍系統RestoreMP,回血系統RestoreHP
(二)法師角色
public class Mage:Role
public override void RestoreMP()
{
Console.WriteLine("每秒回複10點MP");
}
public override void RestoreHP()
Console.WriteLine("每秒回複20點MP");
}
正常情況下,每秒回複藍10點,血20點。
(三)裝飾
public abstract class Decorator : Role
Role _role;
public Decorator() { }
public Decorator(Role role) { _role = role; }
_role.RestoreMP();
_role.RestoreHP();
(四)Mp修改
/// <summary>
/// mp恢複修改
/// </summary>
public class PlugInForMP : Decorator
public PlugInForMP()
{ }
public PlugInForMP(Role role):base(role)
Console.WriteLine("修改遊戲:每秒回複100點MP");
//base.RestoreMP();
(五)Hp恢複
/// hp恢複修改
public class PlugInForHP : Decorator
public PlugInForHP(Role role)
: base(role)
{
Console.WriteLine("修改遊戲:每秒回複500點HP");
//base.RestoreHP();
(六)測試
public void TestDecorator()
//法師角色
Role role = new Mage();
//正常情況下
role.RestoreHP();
role.RestoreMP();
//角色啟用回藍修改
Decorator mp = new PlugInForMP(role);
mp.RestoreMP();
//角色啟用回血修改
Decorator hp = new PlugInForHP(mp);
hp.RestoreHP();
結果:
每秒回複20點MP
每秒回複10點MP
啟用遊戲修改之後……
修改遊戲:每秒回複100點MP
修改遊戲:每秒回複500點HP
如何使“對象功能的擴充”能夠根據需要來動态地實作?同時避免“擴充功能的增多”帶來的子類膨脹問題?進而使得任何“功能擴充變化”所導緻的影響将為最低?
動态地給一個對象添加一些額外的職責。就增加功能來說,Decorator模式相比生成子類更為靈活。《設計模式》GOF
部落格園大道至簡
<a href="http://www.cnblogs.com/jams742003/" target="_blank">http://www.cnblogs.com/jams742003/</a>
轉載請注明:部落格園