此篇文章参考自《大话设计模式》(程杰)
上篇说道简单工厂模式,这一次准备说一下《大话设计模式》中策略模式。。。
为什么要使用策略模式呢?
因为生活中会出现很多活动,比如昨天七夕店家会打折或者满减,总之可能会出现关于定价的很多变化。如果对应一个活动,我们写一种代码,我觉得程序员小哥哥们会崩溃的,老板也会崩溃的。
什么是策略模式???(此处定义来自大话设计模式)
策略模式:他定义了算法家族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化,不会影响到使用算法的客户。
//代码来自《大话设计模式》
// Strategy类:定义所以支持的算法的公共接口。
abstract class Strategy
{
//算法方法
public abstract void AlgrithmInterface();
}
//ConcreteStratrgy:封装了具体的算法或者行为,继承与Stratrgy
//算法A
class ConcreteStrategyA:strategy
{
//算法A实现方法
public override void AlgrithmInterface()
{
Console.WriteLine("算法A实现");
}
}
class ConcreteStrategyB:strategy
{
//算法B实现方法
public override void AlgrithmInterface()
{
Console.WriteLine("算法B实现");
}
}
//Context:用一个ConcreteStrategy来配置,维护一个对Strategy对象的引用。
class Context
{
Strategy strategy;
public Context(Strategy strategy)
{
this.strategy = strategy;
}
public void ContextInterface()
{
strategy.AlgrithmInterface();
}
}
客户端实现代码:
static void Main(string[] args)
{
Context context;
context = new Context(new ConcreteStrategyA);
context.ContextInterface();
}
下面解释一下以上代码:
Strategy:定义所以支持的算法的公共接口。
ConcreteStratrgyA:封装了A的算法或者行为,继承与Stratrgy。
ConcreteStratrgyB:封装了B的算法或者行为,继承与Stratrgy。
Context:实现对所有算法的一个管理,Context通过构造函数接收来自客户端的算法选择,通过ContextInterface函数来选择底层不同的算法策略。
策略模式的出现是为什么???
(来自小白对于书籍的理解)如果没有Context的实现选择底层不同的算法策略,那么我们会选择什么样的方式去实现对于算法的选择,我觉得会是分支结构,采用分支结构,对与不同的算法是一种很清楚的选择,但是分支结构意味着如果我们选择去改动代码,比如说增加算法时,需要对整个分支结构重新进行编译部署,所以这种选择不是一种特别优的选择。