修饰模式(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 ...
随机推荐
- javaee学习-新建servlet 直接返回html
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletExcepti ...
- [PR & ML 3] [Introduction] Probability Theory
虽然学过Machine Learning和Probability今天看着一part的时候还是感觉挺有趣,听惊呆的,尤其是Bayesian Approach.奇怪发中文的笔记就很多人看,英文就没有了,其 ...
- (转)MySQL Workbench的使用教程 (初级入门版)
转自:http://www.cnblogs.com/yqskj/archive/2013/03/01/2938027.html MySQL Workbench 是 MySQL AB 最近释放的可视数据 ...
- CSS 之 @media
@media 版本:CSS2 兼容性:IE5+ 语法: @media sMedia {sRules} 取值: sMedia : 指定设备名称.请参阅设备类型 all, aural, braille ...
- C#多线程(二)
一.线程池 每次创建一个线程,都会花费几百微秒级别的时间来创建一个私有的局部栈,每个线程默认使用1M的内存.这个可以在使用Thread类的构造函数时设置: new Thread(new ThreadS ...
- 编写jQuery插件--实现返回顶部插件
国庆过去一周多了,作为IT界的具有严重’工作狂‘性质的宅人,居然还没走出玩耍的心情,拖了程序猿的脚后跟了.最近工作不顺,心情不佳,想吐槽下公司,想了还是厚道点,以彼之道还施彼身,觉得自己也和他们同流合 ...
- hdu 3549 Flow Problem Edmonds_Karp算法求解最大流
Flow Problem 题意:N个顶点M条边,(2 <= N <= 15, 0 <= M <= 1000)问从1到N的最大流量为多少? 分析:直接使用Edmonds_Karp ...
- 【gradle】 入门
robin@robin-PC2 /D/JavaWorkSpace/payment/alipay-wap (master)$ ./gradlew idea
- entity framework extended library , bulk execute,deleting and updating ,opensource
http://weblogs.asp.net/pwelter34/entity-framework-batch-update-and-future-queries
- ubuntu安装svn manager
环境:系统ubuntu14.04 0. 更新软件库 sudo apt-get update sudo apt-get upgrade -y 1. 安装apache,svn,svn的apache模块 s ...