修饰模式(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);
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
|
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 += "-----辅助-----"; } }} |
修饰模式(Decorator结构型)C#简单例子的更多相关文章
- 装饰器模式 Decorator 结构型 设计模式 (十)
引子 现实世界的装饰器模式 大家应该都吃过手抓饼,本文装饰器模式以手抓饼为模型展开简介 "老板,来一个手抓饼, 加个培根, 加个鸡蛋,多少钱?" 这句话会不 ...
- 享元模式 FlyWeight 结构型 设计模式(十五)
享元模式(FlyWeight) “享”取“共享”之意,“元”取“单元”之意. 意图 运用共享技术,有效的支持大量细粒度的对象. 意图解析 面向对象的程序设计中,一切皆是对象,这也就意味着系统的运行将 ...
- 桥接模式 桥梁模式 bridge 结构型 设计模式(十二)
桥接模式Bridge Bridge 意为桥梁,桥接模式的作用就像桥梁一样,用于把两件事物连接起来 意图 将抽象部分与他的实现部分进行分离,使得他们都可以独立的发展. 意图解析 依赖倒置原 ...
- 组合模式 合成模式 COMPOSITE 结构型 设计模式(十一)
组合模式(合成模式 COMPOSITE) 意图 将对象组合成树形结构以表示“部分-整体”的层次结构. Composite使得用户对单个对象和组合对象的使用具有一致性. 树形结构介绍 为了便于理解, ...
- 设计模式10: Facade 外观模式(结构型模式)
Facade 外观模式(结构型模式) 系统的复杂度 假设我们要开发一个坦克模式系统用于模拟坦克车在各种作战环境中的行为,其中坦克系统由引擎.控制器.车轮.车身等各个子系统构成. internal cl ...
- 设计模式12: Proxy 代理模式(结构型模式)
Proxy 代理模式(结构型模式) 直接与间接 人们对于复杂的软件系统常常有一种处理手法,即增加一层间接层,从而对系统获得一种更为灵活.满足特定需求的解决方案.如下图,开始时,A需要和B进行3次通信, ...
- 设计模式11: Flyweight 享元模式(结构型模式)
Flyweight 享元模式(结构型模式) 面向对象的代价 面向对象很好的解决了系统抽象性的问题,同时在大多数情况下也不会损及系统的性能.但是,在某些特殊应用中,由于对象的数量太大,采用面向对象会给系 ...
- 组合模式/composite模式/对象结构型模式
组合模式/composite模式/对象结构型 意图 将对象组合成树形结构以表示"整体--部分"的层次结构.Composite使得用户对单个对象和组合对象的使用具有一致性. 动机 C ...
- 设计模式08: Composite 组合模式(结构型模式)
Composite 组合模式(结构型模式) 对象容器的问题在面向对象系统中,我们常会遇到一类具有“容器”特征的对象——即他们在充当对象的同时,又是其他对象的容器. public interface I ...
随机推荐
- 用python下载辞典
用python下载词源词典Etymoline Online Etymology Dictionary是最好的 English 词源词典,现在来说没有之一.但是,一直在PC上查单词有时不是很方便,遂就想 ...
- Array.prototype.map()详解
今天在地铁上看到这样一个小例子: ["1","2","3"].map(parseInt); 相信很多人和我一样,觉得输出的结果是[1,2,3 ...
- jQuery中模拟用户操作
有时为了节省不想手动操作网页,但又想看到用户操作时的效果,可以用到jQuery提供的trigger方法.见下图代码 在不点击按钮时仍然想弹出this.value 我们只需要在后面加上.trigger( ...
- 点击按钮文字变成input框,点击保存变成文字
<!DOCTYPE html><html lang="en"> <head> <meta http-equiv="Content ...
- json 筛选数据 $.grep过滤数据
var data = { status: "ok", image_size_list: [ { image_size_id: "22", ad_class: & ...
- Java基础中的一些注意点(续)
1.局部(local)变量是在一个方法内定义的变量, 也被称作自动(automatic).临时(temporary)或栈(stack)变量 - 当一个方法被执行时, 局部变量被创建: ...
- 8.MVC框架开发(URL路由配置和URL路由传参空值处理)
1.ASP.NET和MVC的路由请求处理 1)ASP.NET的处理 请求---------响应请求(HttpModule)--------处理请求(HttpHandler)--------把请求的资源 ...
- 什么是UI控件
凡是带有Widget参数的组件都是控件.
- CODEVS 1069关押罪犯
题目描述 Description S 城现有两座监狱,一共关押着N 名罪犯,编号分别为1~N.他们之间的关系自然也极 不和谐.很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突.我们用“怨 ...
- 敏捷开发概述与路线(转自MBAlib)
敏捷开发的概述 简单的说,敏捷开发是一种以人为核心.迭代.循序渐进的开发方法.在敏捷开发中,软件项目的构建被切分成多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征.换言之,就是把一个大项 ...