修饰模式(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)以及数据控制语言( ...
随机推荐
- hdu 4836 The Query on the Tree(线段树or树状数组)
The Query on the Tree Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Ot ...
- 局部敏感哈希-Locality Sensitive Hashing
局部敏感哈希 转载请注明http://blog.csdn.net/stdcoutzyx/article/details/44456679 在检索技术中,索引一直须要研究的核心技术.当下,索引技术主要分 ...
- IOS开发笔记 - 基于wsdl2objc调用webservice
为了方便在ios下调用webserivce,找来了wsdl2objc这样一个开源的框架来解析webservice方便在ios下引用. 下面做个小例子. 1.首先是用Asp.net搭建一个测试的webs ...
- Python学习入门基础教程(learning Python)--2.3.1 Python传参函数设计
本节主要讨论设计传递多个参数子函数的设计方法. 在2.3节里我们讨论了如何自己设计一个带参数的子函数的设计方法,现在我们研究一下如何传递两个及以上参数的设计方法. 函数为何要带参数呢?其实原因很简单, ...
- 安装dotnet core
CentOS 7.1下安装dotnet core .NET CORE的官方(http://dotnet.github.io/getting-started/)只提供了Windows, Ubuntu14 ...
- hdu 5017 Ellipsoid(西安网络赛 1011)
Ellipsoid Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total ...
- Windows Phone开发(38):动画之PointAnimation
原文:Windows Phone开发(38):动画之PointAnimation PointAnimation也是很简单的,与前面说到的两个Animation是差不多的,属性也是一样的,如By.Fro ...
- 和学生探讨吉林大学python问题
学生们真的很强大,我知道玩微信,nodejs.... 我们去学校了解.当时互联网开始64K....
- SQL注入的原理解说,挺好!
原文地址:http://www.cnblogs.com/rush/archive/2011/12/31/2309203.html 1.1.1 总结 前几天,国内最大的程序猿社区CSDN网站的用户数据库 ...
- POJ 2738 Two Ends(记忆化)
Description In the two-player game "Two Ends", an even number of cards is laid out in a ro ...