在策略模式 中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。
现实例子:旅行的出游方式,选择骑自行车、坐汽车,每一种旅行方式都是一个策略
优点: 1、算法可以自由切换。 2、避免使用多重条件判断。 3、扩展性良好。
下面通过 示例 演示 策略模式:
namespace 策略模式
{
internal class Program
{
static void Main(string[] args)
{
Operation operationAdd = new Operation(new Addition());
Console.WriteLine("值为:"+ operationAdd.ExecuteStrategy(10, 20));
Operation operationSub = new Operation(new Subtraction());
Console.WriteLine("值为:" + operationSub.ExecuteStrategy(60, 10));
/*
* 控制台:
* 值为:30
值为:50
*/
}
}
//策略抽象
public interface Strategy
{
int Operate(int num1, int num2);
}
//实体类
public class Addition : Strategy
{
public int Operate(int num1, int num2)
{
return num1 + num2;
}
}
//实体类
public class Subtraction : Strategy
{
public int Operate(int num1, int num2)
{
return num1 - num2;
}
}
//执行 策略
public class Operation
{
private Strategy strategy;
public Operation(Strategy strategy)
{
this.strategy = strategy;
}
public int ExecuteStrategy(int num1, int num2)
{
return strategy.Operate(num1, num2);
}
}
}
缺点: 1、策略类会增多。 2、所有策略类都需要对外暴露。