设计模式--策略模式

此篇文章参考自《大话设计模式》(程杰)

上篇说道简单工厂模式,这一次准备说一下《大话设计模式》中策略模式。。。

为什么要使用策略模式呢?

因为生活中会出现很多活动,比如昨天七夕店家会打折或者满减,总之可能会出现关于定价的很多变化。如果对应一个活动,我们写一种代码,我觉得程序员小哥哥们会崩溃的,老板也会崩溃的。

什么是策略模式???(此处定义来自大话设计模式)

策略模式:他定义了算法家族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化,不会影响到使用算法的客户。

//代码来自《大话设计模式》

// 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的实现选择底层不同的算法策略,那么我们会选择什么样的方式去实现对于算法的选择,我觉得会是分支结构,采用分支结构,对与不同的算法是一种很清楚的选择,但是分支结构意味着如果我们选择去改动代码,比如说增加算法时,需要对整个分支结构重新进行编译部署,所以这种选择不是一种特别优的选择。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值