修饰模式(Decorator结构化)C#简单的例子
播放器的基本功能是移动、执行等。BaseAbility
新增功能:1、伤害技能harmAbility;2、阻碍技能BaulkAbility;3、辅助技能assistAbility
玩家1添加核弹 Decorator harm = new HarmAbility(baseAbility);
玩家2添加伤害技能、阻碍技能 Decorator baulk = new BaulkAbility(harm);
玩家3添加伤害技能、阻碍技能和辅助技能 Decorator assist = new AssistAbility(baulk);
namespace adapterpattern { public partial class DecoratorForm : Form { public DecoratorForm() { InitializeComponent(); } private void btnDisplay_Click(object sender, EventArgs e) { BaseAbility baseAbility = new BaseOperation(); baseAbility.Run(); listBox1.Items.Add(baseData.baseString); baseData.baseString = ""; listBox1.Items.Add("***********玩家1新功能:伤害**************"); Decorator harm = new HarmAbility(baseAbility); harm.Run(); listBox1.Items.Add(baseData.baseString); baseData.baseString = ""; listBox1.Items.Add("***********玩家2新功能:伤害和阻碍**************"); Decorator baulk = new BaulkAbility(harm); baulk.Run(); listBox1.Items.Add(baseData.baseString); baseData.baseString = ""; listBox1.Items.Add("***********玩家3新功能:伤害、阻碍、辅助**************"); Decorator assist = new AssistAbility(baulk); assist.Run(); listBox1.Items.Add(baseData.baseString); } } public abstract class BaseAbility //抽象的基础功能 { public abstract void Run(); } public class BaseOperation : BaseAbility//实体基础功能 { public override void Run() { baseData.baseString += "---移动---"; baseData.baseString += "----执行----"; } } public abstract class Decorator : BaseAbility//接口继承 { private BaseAbility baseAbility;//Has—A对象组合 public Decorator(BaseAbility baseAbility)//装饰连接点 { this.baseAbility = baseAbility; } public override void Run() { baseAbility.Run(); } } public class baseData//数据中转站 { public static string baseString { get; set; } } public class HarmAbility : Decorator//添加伤害技能 { public HarmAbility(BaseAbility baseAbility) : base(baseAbility) { } public override void Run()//添加伤害 { // base.Move(); base.Run(); baseData.baseString += "-----伤害-----"; } } public class BaulkAbility : Decorator//添加阻碍技能 { public BaulkAbility(BaseAbility baseAbility) : base(baseAbility) { } public override void Run()//添加阻碍 { // base.Move(); base.Run(); baseData.baseString += "-----阻碍-----"; } } public class AssistAbility : Decorator//添加辅助技能 { public AssistAbility(BaseAbility baseAbility) : base(baseAbility) { } public override void Run() { base.Run(); baseData.baseString += "-----辅助-----"; } } }
此文件由朱朱编写,转载请注明出自朱朱家园http://blog.csdn.net/zhgl7688
版权声明:本文博主原创文章,博客,未经同意不得转载。