策略模式: 定义了算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
策略模式:
定义了算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
![](/Images/OutliningIndicators/ContractedBlock.gif)
Strategy_Pattern
1
using System;
2
using System.Collections.Generic;
3
using System.Text;
4![](/Images/OutliningIndicators/None.gif)
5
namespace Strategy_Pattern
6![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/ContractedBlock.gif)
{
7
class Program
8![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
9
static void Main(string[] args)
10![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
11
Duck duck = new RedheadDuck();
12
13
duck.display();
14![](/Images/OutliningIndicators/InBlock.gif)
15
duck.performFly();
16
duck.performQuack();
17
IFlyBehavior fly;
18
IQuackBehavior quack;
19
fly = new FlyNoWay();
20
quack = new Squack();
21
duck.setFlyBehavior(fly);
22
duck.setQuackBehavior(quack);
23
duck.performFly();
24
duck.performQuack();
25
26
fly = new FlyRocketPowered();
27
quack = new MuteQuack();
28
duck.setFlyBehavior(fly);
29
duck.setQuackBehavior(quack);
30
duck.performFly();
31
duck.performQuack();
32![](/Images/OutliningIndicators/InBlock.gif)
33
}
34
}
35![](/Images/OutliningIndicators/InBlock.gif)
36
public interface IFlyBehavior //飞行接口
37![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
38
void Fly();
39
40
}
41![](/Images/OutliningIndicators/InBlock.gif)
42
public class FlyWithWings : IFlyBehavior //用翅膀飞行
43![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
44
public void Fly()
45![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
46
Console.WriteLine("I'm fly with wings!!");
47
}
48
}
49![](/Images/OutliningIndicators/InBlock.gif)
50
public class FlyNoWay : IFlyBehavior //不能飞行
51![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
52
public void Fly()
53![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
54
Console.WriteLine("I can't flying!!");
55
}
56
}
57![](/Images/OutliningIndicators/InBlock.gif)
58
public class FlyRocketPowered : IFlyBehavior //用火箭飞行
59![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
60
public void Fly()
61![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
62
Console.WriteLine("I'm flying with a rocket!!");
63
}
64
}
65![](/Images/OutliningIndicators/InBlock.gif)
66
public interface IQuackBehavior //叫的接口
67![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
68
void quack();
69
70
}
71![](/Images/OutliningIndicators/InBlock.gif)
72
public class Quack : IQuackBehavior //呱呱叫
73![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
74
public void quack()
75![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
76
Console.WriteLine("Quack!!!");
77
}
78
}
79![](/Images/OutliningIndicators/InBlock.gif)
80
public class Squack : IQuackBehavior //吱吱叫
81![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
82
public void quack()
83![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
84
Console.WriteLine("Squack!!!");
85
}
86
}
87![](/Images/OutliningIndicators/InBlock.gif)
88
public class MuteQuack : IQuackBehavior //不能叫
89![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
90
public void quack()
91![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
92
Console.WriteLine("Mute!!!");
93
}
94
}
95![](/Images/OutliningIndicators/InBlock.gif)
96
public abstract class Duck //鸭子抽象类
97![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
98
IFlyBehavior flyBehavior;
99
IQuackBehavior quackBehavior;
100![](/Images/OutliningIndicators/InBlock.gif)
101
public Duck()
102![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
103
flyBehavior = new FlyWithWings() ;
104
quackBehavior = new Quack();
105
}
106![](/Images/OutliningIndicators/InBlock.gif)
107
public void swim()
108![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
109
Console.WriteLine("I'm swimming!!");
110
}
111![](/Images/OutliningIndicators/InBlock.gif)
112
public abstract void display();
113
114
public void performFly()
115![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
116
flyBehavior.Fly();
117
}
118![](/Images/OutliningIndicators/InBlock.gif)
119
public void performQuack()
120![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
121
quackBehavior.quack();
122
}
123![](/Images/OutliningIndicators/InBlock.gif)
124
public void setFlyBehavior(IFlyBehavior fly)
125![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
126
flyBehavior = fly;
127
}
128![](/Images/OutliningIndicators/InBlock.gif)
129
public void setQuackBehavior(IQuackBehavior quack)
130![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
131
quackBehavior = quack;
132
}
133![](/Images/OutliningIndicators/InBlock.gif)
134
}
135![](/Images/OutliningIndicators/InBlock.gif)
136
public class RedheadDuck : Duck //红头鸭
137![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
138
public override void display()
139![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
140
Console.WriteLine("I'm a redhead duck!!");
141
}
142
}
143![](/Images/OutliningIndicators/InBlock.gif)
144
}
145![](/Images/OutliningIndicators/None.gif)
定义了算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
![](/Images/OutliningIndicators/ContractedBlock.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
1
![](/Images/OutliningIndicators/None.gif)
2
![](/Images/OutliningIndicators/None.gif)
3
![](/Images/OutliningIndicators/None.gif)
4
![](/Images/OutliningIndicators/None.gif)
5
![](/Images/OutliningIndicators/None.gif)
6
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/ContractedBlock.gif)
![](/Images/dot.gif)
7
![](/Images/OutliningIndicators/InBlock.gif)
8
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
9
![](/Images/OutliningIndicators/InBlock.gif)
10
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
11
![](/Images/OutliningIndicators/InBlock.gif)
12
![](/Images/OutliningIndicators/InBlock.gif)
13
![](/Images/OutliningIndicators/InBlock.gif)
14
![](/Images/OutliningIndicators/InBlock.gif)
15
![](/Images/OutliningIndicators/InBlock.gif)
16
![](/Images/OutliningIndicators/InBlock.gif)
17
![](/Images/OutliningIndicators/InBlock.gif)
18
![](/Images/OutliningIndicators/InBlock.gif)
19
![](/Images/OutliningIndicators/InBlock.gif)
20
![](/Images/OutliningIndicators/InBlock.gif)
21
![](/Images/OutliningIndicators/InBlock.gif)
22
![](/Images/OutliningIndicators/InBlock.gif)
23
![](/Images/OutliningIndicators/InBlock.gif)
24
![](/Images/OutliningIndicators/InBlock.gif)
25
![](/Images/OutliningIndicators/InBlock.gif)
26
![](/Images/OutliningIndicators/InBlock.gif)
27
![](/Images/OutliningIndicators/InBlock.gif)
28
![](/Images/OutliningIndicators/InBlock.gif)
29
![](/Images/OutliningIndicators/InBlock.gif)
30
![](/Images/OutliningIndicators/InBlock.gif)
31
![](/Images/OutliningIndicators/InBlock.gif)
32
![](/Images/OutliningIndicators/InBlock.gif)
33
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
34
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
35
![](/Images/OutliningIndicators/InBlock.gif)
36
![](/Images/OutliningIndicators/InBlock.gif)
37
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
38
![](/Images/OutliningIndicators/InBlock.gif)
39
![](/Images/OutliningIndicators/InBlock.gif)
40
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
41
![](/Images/OutliningIndicators/InBlock.gif)
42
![](/Images/OutliningIndicators/InBlock.gif)
43
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
44
![](/Images/OutliningIndicators/InBlock.gif)
45
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
46
![](/Images/OutliningIndicators/InBlock.gif)
47
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
48
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
49
![](/Images/OutliningIndicators/InBlock.gif)
50
![](/Images/OutliningIndicators/InBlock.gif)
51
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
52
![](/Images/OutliningIndicators/InBlock.gif)
53
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
54
![](/Images/OutliningIndicators/InBlock.gif)
55
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
56
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
57
![](/Images/OutliningIndicators/InBlock.gif)
58
![](/Images/OutliningIndicators/InBlock.gif)
59
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
60
![](/Images/OutliningIndicators/InBlock.gif)
61
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
62
![](/Images/OutliningIndicators/InBlock.gif)
63
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
64
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
65
![](/Images/OutliningIndicators/InBlock.gif)
66
![](/Images/OutliningIndicators/InBlock.gif)
67
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
68
![](/Images/OutliningIndicators/InBlock.gif)
69
![](/Images/OutliningIndicators/InBlock.gif)
70
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
71
![](/Images/OutliningIndicators/InBlock.gif)
72
![](/Images/OutliningIndicators/InBlock.gif)
73
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
74
![](/Images/OutliningIndicators/InBlock.gif)
75
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
76
![](/Images/OutliningIndicators/InBlock.gif)
77
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
78
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
79
![](/Images/OutliningIndicators/InBlock.gif)
80
![](/Images/OutliningIndicators/InBlock.gif)
81
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
82
![](/Images/OutliningIndicators/InBlock.gif)
83
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
84
![](/Images/OutliningIndicators/InBlock.gif)
85
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
86
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
87
![](/Images/OutliningIndicators/InBlock.gif)
88
![](/Images/OutliningIndicators/InBlock.gif)
89
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
90
![](/Images/OutliningIndicators/InBlock.gif)
91
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
92
![](/Images/OutliningIndicators/InBlock.gif)
93
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
94
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
95
![](/Images/OutliningIndicators/InBlock.gif)
96
![](/Images/OutliningIndicators/InBlock.gif)
97
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
98
![](/Images/OutliningIndicators/InBlock.gif)
99
![](/Images/OutliningIndicators/InBlock.gif)
100
![](/Images/OutliningIndicators/InBlock.gif)
101
![](/Images/OutliningIndicators/InBlock.gif)
102
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
103
![](/Images/OutliningIndicators/InBlock.gif)
104
![](/Images/OutliningIndicators/InBlock.gif)
105
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
106
![](/Images/OutliningIndicators/InBlock.gif)
107
![](/Images/OutliningIndicators/InBlock.gif)
108
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
109
![](/Images/OutliningIndicators/InBlock.gif)
110
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
111
![](/Images/OutliningIndicators/InBlock.gif)
112
![](/Images/OutliningIndicators/InBlock.gif)
113
![](/Images/OutliningIndicators/InBlock.gif)
114
![](/Images/OutliningIndicators/InBlock.gif)
115
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
116
![](/Images/OutliningIndicators/InBlock.gif)
117
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
118
![](/Images/OutliningIndicators/InBlock.gif)
119
![](/Images/OutliningIndicators/InBlock.gif)
120
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
121
![](/Images/OutliningIndicators/InBlock.gif)
122
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
123
![](/Images/OutliningIndicators/InBlock.gif)
124
![](/Images/OutliningIndicators/InBlock.gif)
125
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
126
![](/Images/OutliningIndicators/InBlock.gif)
127
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
128
![](/Images/OutliningIndicators/InBlock.gif)
129
![](/Images/OutliningIndicators/InBlock.gif)
130
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
131
![](/Images/OutliningIndicators/InBlock.gif)
132
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
133
![](/Images/OutliningIndicators/InBlock.gif)
134
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
135
![](/Images/OutliningIndicators/InBlock.gif)
136
![](/Images/OutliningIndicators/InBlock.gif)
137
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
138
![](/Images/OutliningIndicators/InBlock.gif)
139
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
140
![](/Images/OutliningIndicators/InBlock.gif)
141
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
142
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
143
![](/Images/OutliningIndicators/InBlock.gif)
144
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
145
![](/Images/OutliningIndicators/None.gif)