修饰模式(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)以及数据控制语言( ...
随机推荐
- JS正则验证邮箱的格式
一.相关的代码 1 function test() 2 { 3 var temp = document.getElementById("text ...
- oracle之spool详细使用总结(转)
今天实际项目中用到了spool,发现网上好多内容不是很全,自己摸索了好半天,现在总结一下. 一.通过spool 命令,可以将select 数据库的内容写到文件中,通过在sqlplus设置一些参数,使得 ...
- What the difference between rebuild index and re-organize index?
avg_fragmentation_in_percent value Corrective statement > 5% and < = 30% ALTER INDEX REORGANIZ ...
- (七)unity4.6Ugui中国教程文档-------摘要-UGUI Auto Layout
大家好,我是太阳广东. 转载请注明出处:http://write.blog.csdn.net/postedit/38922399 更全的内容请看我的游戏蛮牛地址:http://www.unityman ...
- WPS2012交叉引用提示word比wps这种强烈的更新参考
WPS2012交叉引用技巧,word比wps这点强更新參考文献 到时生成仅仅有有一条线,好像WPS不能够,word能够,假设谁知道能够补充.^_^ 1.写论文,參考文献的改动非 ...
- Swift语言教程中文文档
Swift语言教程中文文档 Swift语言教程(一)基础数据类型 Swift语言教程(二)基础数据类型 Swift语言教程(三)集合类型 Swift语言教程(四) 集合类型 Swift语言教程(五)控 ...
- ORA-00913错误:PL/SQL: ORA-00913: too many values
ORA-00913错误 描写叙述:PL/SQL: ORA-00913: too many values 目标:编写一个能够循环插入数据的脚本 操作过程: SQL> desc tcustmer N ...
- Android TextView里直接显示图片的三种方法
方法一:重写TextView的onDraw方法,也挺直观就是不太好控制显示完图片后再显示字体所占空间的位置关系.一般假设字体是在图片上重叠的推荐这样写.时间关系,这个不付源代码了. 方法二:利用Tex ...
- android弹出时间选择框
时间选择框: new DatePickerDialog(this, new OnDateSetListener() { @Override public void onDateSet(DatePick ...
- oracle存储过程的例子
oracle存储过程的例子 分类: 数据(仓)库及处理 2010-05-03 17:15 1055人阅读 评论(2)收藏 举报 认识存储过程和函数 存储过程和函数也是一种PL/SQL块,是存入数据库的 ...