修饰模式(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. namespace adapterpattern
  2. {
  3. public partial class DecoratorForm : Form
  4. {
  5. public DecoratorForm()
  6. {
  7. InitializeComponent();
  8. }
  9.  
  10. private void btnDisplay_Click(object sender, EventArgs e)
  11. {
  12. BaseAbility baseAbility = new BaseOperation();
  13. baseAbility.Run();
  14. listBox1.Items.Add(baseData.baseString);
  15.  
  16. baseData.baseString = "";
  17. listBox1.Items.Add("***********玩家1新功能:伤害**************");
  18. Decorator harm = new HarmAbility(baseAbility);
  19. harm.Run();
  20. listBox1.Items.Add(baseData.baseString);
  21.  
  22. baseData.baseString = "";
  23. listBox1.Items.Add("***********玩家2新功能:伤害和阻碍**************");
  24. Decorator baulk = new BaulkAbility(harm);
  25. baulk.Run();
  26. listBox1.Items.Add(baseData.baseString);
  27.  
  28. baseData.baseString = "";
  29. listBox1.Items.Add("***********玩家3新功能:伤害、阻碍、辅助**************");
  30. Decorator assist = new AssistAbility(baulk);
  31. assist.Run();
  32. listBox1.Items.Add(baseData.baseString);
  33. }
  34. }
  35.  
  36. public abstract class BaseAbility //抽象的基础功能
  37. {
  38. public abstract void Run();
  39. }
  40. public class BaseOperation : BaseAbility//实体基础功能
  41. {
  42. public override void Run()
  43. {
  44. baseData.baseString += "---移动---";
  45. baseData.baseString += "----执行----";
  46. }
  47. }
  48. public abstract class Decorator : BaseAbility//接口继承
  49. {
  50. private BaseAbility baseAbility;//Has—A对象组合
  51. public Decorator(BaseAbility baseAbility)//装饰连接点
  52. {
  53. this.baseAbility = baseAbility;
  54. }
  55. public override void Run()
  56. {
  57. baseAbility.Run();
  58. }
  59. }
  60. public class baseData//数据中转站
  61. {
  62. public static string baseString { get; set; }
  63. }
  64. public class HarmAbility : Decorator//添加伤害技能
  65. {
  66. public HarmAbility(BaseAbility baseAbility)
  67. : base(baseAbility)
  68. { }
  69. public override void Run()//添加伤害
  70. {
  71. // base.Move();
  72. base.Run();
  73. baseData.baseString += "-----伤害-----";
  74. }
  75. }
  76. public class BaulkAbility : Decorator//添加阻碍技能
  77. {
  78.  
  79. public BaulkAbility(BaseAbility baseAbility)
  80. : base(baseAbility)
  81. { }
  82. public override void Run()//添加阻碍
  83. {
  84. // base.Move();
  85. base.Run();
  86. baseData.baseString += "-----阻碍-----";
  87. }
  88. }
  89. public class AssistAbility : Decorator//添加辅助技能
  90. {
  91. public AssistAbility(BaseAbility baseAbility)
  92. : base(baseAbility)
  93. { }
  94. public override void Run()
  95. {
  96. base.Run();
  97. baseData.baseString += "-----辅助-----";
  98. }
  99. }
  100. }

此文件由朱朱编写,转载请注明出自朱朱家园http://blog.csdn.net/zhgl7688

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

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

  1. Singleton模式(Singleton创建类型)c#简单的例子

    单(Singleton创建模式)c#简单的例子 当需要生成一个实例,可单发模式 样品可以在短短的球员中产生,玩家和测试.单线程例子,如以下: namespace singletonpattern { ...

  2. NumPy之:结构化数组详解

    目录 简介 结构化数组中的字段field 结构化数据类型 创建结构化数据类型 从元组创建 从逗号分割的dtype创建 从字典创建 操作结构化数据类型 Offsets 和Alignment Field ...

  3. 修饰模式(Decorator结构型)C#简单例子

    修饰模式(Decorator结构型)C#简单例子 玩家基本功能是移动.运行等等.BaseAbility新增加功能:1.伤害技能harmAbility:2.阻碍技能BaulkAbility:3.辅助技能 ...

  4. 利用Mongoose来结构化模式与验证

    Mongoose是一个文档对象模型(ODM)库,为MongoDB Node.js原生驱动程序提供更多的功能. 把结构化的模式应用到一个MongoDB集合,提供了验证和类型转换的好处 Mongoose通 ...

  5. 简单了解SQL(结构化查询语言)

    简单了解SQL(结构化查询语言) 年10月,美国国家标准学会对SQL进行规范后,以此作为关系式数据库管理系统的标准语言(ANSI X3. 135-1986),1987年得到国际标准组织的支持下成为国际 ...

  6. 结构化您的Python工程

    我们对于"结构化"的定义是您关注于怎样使您的项目最好地满足它的对象性,我们 需要去考虑如何更好地利用Python的特性来创造简洁.高效的代码.在实践层面, "结构化&qu ...

  7. 举例说, Decorator模式(Decorator Pattern)

    前言    在食品工业中的装饰图案具有比较广泛的应用,大多数的两个图案和在网上的例子饮食相关的,一旦被称为电影的手表,点咖啡要加糖要加奶昔要加这加那的时候.感觉好有派~好高大上啊~.为啥我在小卖部都是 ...

  8. 你真的了解字典(Dictionary)吗? C# Memory Cache 踩坑记录 .net 泛型 结构化CSS设计思维 WinForm POST上传与后台接收 高效实用的.NET开源项目 .net 笔试面试总结(3) .net 笔试面试总结(2) 依赖注入 C# RSA 加密 C#与Java AES 加密解密

    你真的了解字典(Dictionary)吗?   从一道亲身经历的面试题说起 半年前,我参加我现在所在公司的面试,面试官给了一道题,说有一个Y形的链表,知道起始节点,找出交叉节点.为了便于描述,我把上面 ...

  9. (三) 结构化查询语言SQL——1

    1. SQL概述 SQL,结构化查询语言,重要性不必在赘述了,基本上开发软件没有不用到的,此外在一些大数据也有广泛的应用.SQL主要包含数据定义语言(DDL).数据操纵语言(DML)以及数据控制语言( ...

随机推荐

  1. Android 将Activity殴打jar包 对于由第三方使用 解决XML 图片 文本资源并不难过进入jar包装问题!

    做项目需要打包成jar文件供第三方使用项目要求(将图片 文字资源写到到jar包中,第三方调用时,仅须要在AndroidManifest.xml配置下对应的Activity通过StartActivity ...

  2. HttpClient4的使用,模拟浏览器登陆新浪微博,发表微博和文字+图片微博

    HttpClient4,最原始的需求就是使用其来模拟浏览器想服务器发起http请求,当然,他的功能不止于此,但是我需要的就是这个功能而已,jdk也有其自带的类似的api:UrlConnection,效 ...

  3. JavaMail学习笔记(七)、帐号激活与忘记密码 实例(zhuan)

    一.帐户激活   在很多时候,在某些网站注册一个用户之后,网站会给这个用户注册时填写的email地址发送一封帐户激活邮件,这封邮件的内容就是一个激活帐户的链接和一段简短的文字描述,如果用户没有去邮箱将 ...

  4. Thinkpad X200 屏幕备案

    妈妈蛋,屏幕废物前几天(闪屏->暗->变暗),因此,它只能监视房外 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjk2NTg5MA= ...

  5. C# 制作Java +Mysql+Tomcat 环境安装程序,一键式安装

    原文:C# 制作Java +Mysql+Tomcat 环境安装程序,一键式安装 要求: JDK.Mysql.Tomcat三者制作成一个安装包, 不能单独安装,安装过程不显示三者的界面, 安装完成要配置 ...

  6. C经典之14-双向链表存储1-10---ShinePans

    #include <stdio.h> #include <conio.h> #include <stdlib.h> //system(); 这个指令须要用到此头文件 ...

  7. 排序算法c语言描述---冒泡排序

    排序算法系列学习,主要描述冒泡排序,选择排序,直接插入排序,希尔排序,堆排序,归并排序,快速排序等排序进行分析. 文章规划: 一.通过自己对排序算法本身的理解,对每个方法写个小测试程序. 具体思路分析 ...

  8. Vijos P1881 闪烁的星星 (加强自己多一点。。)

    假设每次查询不是整个长度,但[x, y]此时间间隔. . 闲来无事写的,感觉是正确的.这将成为合并范围. #include <cstdio> #include <cstring> ...

  9. TCP/IP-协议族----17、应用层简单

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaGVrZXdhbmd6aQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQk ...

  10. OS调度算法常用摘要

    一.常见的批处理作业调度 1.先来先服务调度算法(FCFS):就是依照各个作业进入系统的自然次序来调度作业.这样的调度算法的长处是实现简单,公平. 其缺点是没有考虑到系统中各种资源的综合使用情况,往往 ...