修饰模式(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 += "-----辅助-----" ;
}
}
} |