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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
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 += "-----辅助-----";
        }
    }
}

修饰模式(Decorator结构型)C#简单例子的更多相关文章

  1. 装饰器模式 Decorator 结构型 设计模式 (十)

    引子           现实世界的装饰器模式 大家应该都吃过手抓饼,本文装饰器模式以手抓饼为模型展开简介 "老板,来一个手抓饼,  加个培根,  加个鸡蛋,多少钱?" 这句话会不 ...

  2. 享元模式 FlyWeight 结构型 设计模式(十五)

    享元模式(FlyWeight)  “享”取“共享”之意,“元”取“单元”之意. 意图 运用共享技术,有效的支持大量细粒度的对象. 意图解析 面向对象的程序设计中,一切皆是对象,这也就意味着系统的运行将 ...

  3. 桥接模式 桥梁模式 bridge 结构型 设计模式(十二)

      桥接模式Bridge   Bridge 意为桥梁,桥接模式的作用就像桥梁一样,用于把两件事物连接起来   意图 将抽象部分与他的实现部分进行分离,使得他们都可以独立的发展.  意图解析 依赖倒置原 ...

  4. 组合模式 合成模式 COMPOSITE 结构型 设计模式(十一)

    组合模式(合成模式 COMPOSITE) 意图 将对象组合成树形结构以表示“部分-整体”的层次结构. Composite使得用户对单个对象和组合对象的使用具有一致性.   树形结构介绍 为了便于理解, ...

  5. 设计模式10: Facade 外观模式(结构型模式)

    Facade 外观模式(结构型模式) 系统的复杂度 假设我们要开发一个坦克模式系统用于模拟坦克车在各种作战环境中的行为,其中坦克系统由引擎.控制器.车轮.车身等各个子系统构成. internal cl ...

  6. 设计模式12: Proxy 代理模式(结构型模式)

    Proxy 代理模式(结构型模式) 直接与间接 人们对于复杂的软件系统常常有一种处理手法,即增加一层间接层,从而对系统获得一种更为灵活.满足特定需求的解决方案.如下图,开始时,A需要和B进行3次通信, ...

  7. 设计模式11: Flyweight 享元模式(结构型模式)

    Flyweight 享元模式(结构型模式) 面向对象的代价 面向对象很好的解决了系统抽象性的问题,同时在大多数情况下也不会损及系统的性能.但是,在某些特殊应用中,由于对象的数量太大,采用面向对象会给系 ...

  8. 组合模式/composite模式/对象结构型模式

    组合模式/composite模式/对象结构型 意图 将对象组合成树形结构以表示"整体--部分"的层次结构.Composite使得用户对单个对象和组合对象的使用具有一致性. 动机 C ...

  9. 设计模式08: Composite 组合模式(结构型模式)

    Composite 组合模式(结构型模式) 对象容器的问题在面向对象系统中,我们常会遇到一类具有“容器”特征的对象——即他们在充当对象的同时,又是其他对象的容器. public interface I ...

随机推荐

  1. jQuery 源码分析 7: sizzle

    jQuery使用的是sizzle这个选择器引擎,这个引擎以其高速著称,其实现十分精妙但是也足够复杂,下面现简单分析一下相关的代码. 在jQuery的部分API接口是直接引用了Sizzle的方法,这些接 ...

  2. 英语中的 姓氏/Surname

    .Chomsky (Belarusian: Хомскі, Russian: Хомский, Ukrainian: Хомський, Hebrew: חומסקי‎‎, "from (V ...

  3. OpenJudge 2737 大整数除法

    链接地址:http://bailian.openjudge.cn/practice/2737/ 题目: 总时间限制: 1000ms 内存限制: 65536kB 描述 求2个大的正整数相除的商 输入 第 ...

  4. Linux之最最最最基础(包括在虚拟机中安装linux系统)

    这里是以CentOS 6.5  64bit为例(学习用这个,Kali神马的有兴趣自己研究(这个系统是玩渗透用的)) 一 ---->配置Vmware Workstation     自定义--选择 ...

  5. C#生成二维码名片

    摘自<31天学会CRM项目开发<C#编程入门级项目实战>> 本例将使用ThoughtWorks.QRCode类库生成二维码名片.正式编码前,先了解一下什么是vCard?它是一种 ...

  6. javascript 上传 预览图片 兼容 谷歌 ie

    最近的项目要用到这块,但是在网上找了很多资料,很多都是假的,都不行,最后终于找到一个,还是可以兼容主流的,特分享给大家,可以用 <!DOCTYPE html PUBLIC "-//W3 ...

  7. MySQL基础学习之索引

    创建新表新索引 CREATE TABLE 表名(数据名 类型,INDEX  索引名称(属性)) 创建存在表的索引 CREATE INDEX 索引名称  ON 表名(属性) 修改索引 ALTER TAB ...

  8. javascript cookie 操作

    <html> <head> <meta charset="utf-8"> <title>Javascript cookie</ ...

  9. building hadoop2.4.1 on centos7[在centos7上面构建hadoop2.4.1]

    本文介绍在centos7上面通过hadoop2.4.1源码构建hadoop distribution 版本,即hadoop的运行版本. 为何要自己building,而不用Apache的distribu ...

  10. SQL语句中使用条件逻辑

    select name, sal, case when sal >= 4000 then 'Good' when sal <= 2000 then 'Bad' else 'Ok' end ...