修饰模式(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)以及数据控制语言( ...
随机推荐
- 【VMware混合云】掀起你的盖头来
作者:范军 (Frank Fan) 新浪微博:@frankfan7 微信:frankfan7 VMware混合云服务(vCHS)预计在2013年8月23日正式面向用户推出.目前开放服务的四个数据中 ...
- Python入门(转)
Python 简洁的语法和对动态输入的支持,再加上解释性语言的本质, 使得它在大多数平台上的许多领域都是一个理想的脚本语言,特别适用于快速的应用程序开发 特点:简单.易学.免费.开源.高层语言.可移植 ...
- 初窥Linux 之 文件权限
一.用户与用户组 为了更好地理解文件权限,我们需要先有用户和用户组的概念.因为在Linux里面,任何一个文件都具有“User(用户).Group(用户组)及Others(其他用户)”3种身份的个别权限 ...
- Django操作model时刻,一个错误:AttributeError:’ProgrammingError’ object has no attribute ‘__traceback__’
原因:在Django项目下对应的应用以下的models.py配置的model(也就是class)没有创建成对应的表. 这是怎么回事呢? 首先,将models.py里面的model创建成相应的数据库表的 ...
- Java多线程的wait(),notify(),notifyAll()
在多线程的情况下.因为多个线程与存储空间共享相同的过程,同时带来的便利.它也带来了访问冲突这个严重的问题. Java语言提供了一种特殊的机制来解决这类冲突,避免同一数据对象由多个线程在同一时间访问. ...
- C++笔试面试总结
手游广州某公司书面今天接受采访时.刚进去中午1中场休息.他们公司谁刚刚醒来,一个冷漠打牌,然后去上班.瞬间,这些公司有没有什么好印象,压抑. 接着快2点的时候.发了一份笔试题.大部分题目均在网上的&l ...
- Directx11学习笔记【十七】纹理贴图
本文由zhangbaochong原创,转载请注明出处http://www.cnblogs.com/zhangbaochong/p/5596180.html 在之前的例子中,我们实现了光照和材质使得场景 ...
- CentOS7下一个mysql安装
CentOS7安装MySQL --下载mysql http://mirrors.sohu.com/mysql/MySQL-5.6/ http://mirrors.sohu.com/mysql/MySQ ...
- TypeScript 5 Angular 2
TypeScript 5 分钟快速入门 翻译:Angular 2 - TypeScript 5 分钟快速入门 原文地址:https://angular.io/docs/ts/latest/quicks ...
- c#中 uint--byte[]--char[]--string相互转换汇总
原文:c#中 uint--byte[]--char[]--string相互转换汇总 在在做一些互操作的时候往往需要一些类型的相互转换,比如用c#访问win32api的时候往往需要向api中传入DWOR ...