策略模式+简单⼯⼚模式
策略模式实现⽅式
a) 提供公共接⼝或抽象类,定义需要使⽤的策略⽅法。(策略抽象类)
b) 多个实现的策略抽象类的实现类。(策略实现类)
c) 环境类,对多个实现类的封装,提供接⼝类型的成员量,可以在客户端中切换。
d) 客户端调⽤环境类进⾏不同策略的切换。
策略模式的优点
1、策略模式提供了管理相关的算法族的办法。策略类的等级结构定义了⼀个算法或⾏为族。恰当使⽤继承可以把公共的代码移到⽗类⾥⾯,从⽽避免代码重复。
2、使⽤策略模式可以避免使⽤多重条件(if-else)语句。多重条件语句不易维护,它把采取哪⼀种算法或采取哪⼀种⾏为的逻辑与算法或⾏为的逻辑混合在⼀起,统统列在⼀个多重条件语句⾥⾯,⽐使⽤继承的
办法还要原始和落后。
策略模式的缺点
1、客户端必须知道所有的策略类,并⾃⾏决定使⽤哪⼀个策略类。这就意味着客户端必须理解这些算法的区别,以便适时选择恰当的算法类。换⾔之,策略模式只适⽤于客户端知道算法或⾏为的情况。
2、由于策略模式把每个具体的策略实现都单独封装成为类,如果备选的策略很多的话,那么对象的数⽬就会很可观。
实现例⼦如下:
1using System;
2using System.Collections.Generic;
3using System.Text;
4
5namespace ConsoleApp1
6 {
7///<summary>
8///算法基类
9///</summary>
10public class arithmetic
11 {
12public int A { get; set; }
13
14public int B { get; set; }
15
16public virtual int operation()
17 {
18return0;
19 }
20 }
21
22///<summary>
23///加法
24///</summary>
25public class arithmeticAdd : arithmetic
26 {
27public override int operation()
28 {
29return A + B;
30
31 }
32 }
33
34///<summary>
35///减法
36///</summary>
37public class arithmeticSubtraction : arithmetic
38 {
39public override int operation()
40 {
41return A - B;
42 }
43 }
44
45///<summary>
46///策略类
47///</summary>
48public class context
49 {
50private arithmetic op;
51public context(string type)
52 {
53switch (type)
54 {
55case"+": { op = new arithmeticAdd(); };break;
抽象类的使用56case"-": { op = new arithmeticSubtraction(); }; break;
57 }
58 }
59
60public int getResult()
61 {
62return op.operation();
63 }
64 }
65
66 }
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论