zoukankan      html  css  js  c++  java
  • 修饰模式(Decorator结构化)C#简单的例子

    修饰模式(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



    版权声明:本文博主原创文章,博客,未经同意不得转载。

  • 相关阅读:
    用折半查找法找出整型数组中指定元素所在的位置,并输出(折半查找法只能用于有序数列)。
    统计母字符串中含有子串的个数。
    //插入排序法对数组中的元素按从小到大进行排序
    求斐波那契(fibonacci)数列前20项的值 ,递归调用
    C++实现一句英文句子中的单词逆置
    C语言-黑白棋(人机对战)
    第九届蓝桥杯-明码
    四连块dfs
    八连块dfs
    求素数
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4891799.html
Copyright © 2011-2022 走看看