修饰模式(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
版权声明:本文博主原创文章,博客,未经同意不得转载。
修饰模式(Decorator结构化)C#简单的例子的更多相关文章
- Singleton模式(Singleton创建类型)c#简单的例子
单(Singleton创建模式)c#简单的例子 当需要生成一个实例,可单发模式 样品可以在短短的球员中产生,玩家和测试.单线程例子,如以下: namespace singletonpattern { ...
- NumPy之:结构化数组详解
目录 简介 结构化数组中的字段field 结构化数据类型 创建结构化数据类型 从元组创建 从逗号分割的dtype创建 从字典创建 操作结构化数据类型 Offsets 和Alignment Field ...
- 修饰模式(Decorator结构型)C#简单例子
修饰模式(Decorator结构型)C#简单例子 玩家基本功能是移动.运行等等.BaseAbility新增加功能:1.伤害技能harmAbility:2.阻碍技能BaulkAbility:3.辅助技能 ...
- 利用Mongoose来结构化模式与验证
Mongoose是一个文档对象模型(ODM)库,为MongoDB Node.js原生驱动程序提供更多的功能. 把结构化的模式应用到一个MongoDB集合,提供了验证和类型转换的好处 Mongoose通 ...
- 简单了解SQL(结构化查询语言)
简单了解SQL(结构化查询语言) 年10月,美国国家标准学会对SQL进行规范后,以此作为关系式数据库管理系统的标准语言(ANSI X3. 135-1986),1987年得到国际标准组织的支持下成为国际 ...
- 结构化您的Python工程
我们对于"结构化"的定义是您关注于怎样使您的项目最好地满足它的对象性,我们 需要去考虑如何更好地利用Python的特性来创造简洁.高效的代码.在实践层面, "结构化&qu ...
- 举例说, Decorator模式(Decorator Pattern)
前言 在食品工业中的装饰图案具有比较广泛的应用,大多数的两个图案和在网上的例子饮食相关的,一旦被称为电影的手表,点咖啡要加糖要加奶昔要加这加那的时候.感觉好有派~好高大上啊~.为啥我在小卖部都是 ...
- 你真的了解字典(Dictionary)吗? C# Memory Cache 踩坑记录 .net 泛型 结构化CSS设计思维 WinForm POST上传与后台接收 高效实用的.NET开源项目 .net 笔试面试总结(3) .net 笔试面试总结(2) 依赖注入 C# RSA 加密 C#与Java AES 加密解密
你真的了解字典(Dictionary)吗? 从一道亲身经历的面试题说起 半年前,我参加我现在所在公司的面试,面试官给了一道题,说有一个Y形的链表,知道起始节点,找出交叉节点.为了便于描述,我把上面 ...
- (三) 结构化查询语言SQL——1
1. SQL概述 SQL,结构化查询语言,重要性不必在赘述了,基本上开发软件没有不用到的,此外在一些大数据也有广泛的应用.SQL主要包含数据定义语言(DDL).数据操纵语言(DML)以及数据控制语言( ...
随机推荐
- Android 将Activity殴打jar包 对于由第三方使用 解决XML 图片 文本资源并不难过进入jar包装问题!
做项目需要打包成jar文件供第三方使用项目要求(将图片 文字资源写到到jar包中,第三方调用时,仅须要在AndroidManifest.xml配置下对应的Activity通过StartActivity ...
- HttpClient4的使用,模拟浏览器登陆新浪微博,发表微博和文字+图片微博
HttpClient4,最原始的需求就是使用其来模拟浏览器想服务器发起http请求,当然,他的功能不止于此,但是我需要的就是这个功能而已,jdk也有其自带的类似的api:UrlConnection,效 ...
- JavaMail学习笔记(七)、帐号激活与忘记密码 实例(zhuan)
一.帐户激活 在很多时候,在某些网站注册一个用户之后,网站会给这个用户注册时填写的email地址发送一封帐户激活邮件,这封邮件的内容就是一个激活帐户的链接和一段简短的文字描述,如果用户没有去邮箱将 ...
- Thinkpad X200 屏幕备案
妈妈蛋,屏幕废物前几天(闪屏->暗->变暗),因此,它只能监视房外 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjk2NTg5MA= ...
- C# 制作Java +Mysql+Tomcat 环境安装程序,一键式安装
原文:C# 制作Java +Mysql+Tomcat 环境安装程序,一键式安装 要求: JDK.Mysql.Tomcat三者制作成一个安装包, 不能单独安装,安装过程不显示三者的界面, 安装完成要配置 ...
- C经典之14-双向链表存储1-10---ShinePans
#include <stdio.h> #include <conio.h> #include <stdlib.h> //system(); 这个指令须要用到此头文件 ...
- 排序算法c语言描述---冒泡排序
排序算法系列学习,主要描述冒泡排序,选择排序,直接插入排序,希尔排序,堆排序,归并排序,快速排序等排序进行分析. 文章规划: 一.通过自己对排序算法本身的理解,对每个方法写个小测试程序. 具体思路分析 ...
- Vijos P1881 闪烁的星星 (加强自己多一点。。)
假设每次查询不是整个长度,但[x, y]此时间间隔. . 闲来无事写的,感觉是正确的.这将成为合并范围. #include <cstdio> #include <cstring> ...
- TCP/IP-协议族----17、应用层简单
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaGVrZXdhbmd6aQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQk ...
- OS调度算法常用摘要
一.常见的批处理作业调度 1.先来先服务调度算法(FCFS):就是依照各个作业进入系统的自然次序来调度作业.这样的调度算法的长处是实现简单,公平. 其缺点是没有考虑到系统中各种资源的综合使用情况,往往 ...