策略模式——封装算法,相互替换

小编对策略模式还是比较熟悉的,因为用到了几次,下面我给大家说说策略模式吧!

what

官方定义:定义算法家族,分别封装起来,让他们之间可以相互替换,,此模式让算法的变化不会影响到十四用算法的客户

自己总结:封装策略,让策略根据要求相互替换

when

需要不同时间应用不同的业务规则,就可以考苏使用策略模式应对变化(和状态模式蛮像的)

why

和状态模式一样,这个模式限消除了条件语句,而且把变化的部分抽离出来——一系列算法,我们可以根据需求来使用对应的算法。

demo

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 策略模式
{
    //定义一系列算法,把他们一个个封装起来,并且使他们可以相互替换,是的算法独立于使用他们的客户而变化
    class Program
    {
        static void Main(string[] args)
        {
            Content content;
            content = new Content(new ConcreteStrategyA());
            content.ContextInterface();

            content = new Content(new ConcreteStrategyB());
            content.ContextInterface();

            content = new Content(new ConcreteStrategyC());
            content.ContextInterface();

            Console.Read();
        }
         abstract class Strategy
        {
            public abstract void AlgorithmlImterfaca();
        }

         class ConcreteStrategyA:Strategy 
        {
            public override void AlgorithmlImterfaca()
            {

                Console.WriteLine("算法A实现");
            }

        }
         class ConcreteStrategyB : Strategy
        {
            public override void AlgorithmlImterfaca()
            {
                Console.WriteLine("算法B实现");
            }
        }
          class ConcreteStrategyC : Strategy
        {
            public override void AlgorithmlImterfaca()
            {
                Console.WriteLine("算法C实现");
            }
        }

         class Content
        {
            Strategy strategy;
            public Content(Strategy strategy)
            {
                this.strategy = strategy;//体现聚合关系,初始化时,传入具体的策略对象
            }
            public void ContextInterface()
            { 
                strategy.AlgorithmlImterfaca();//根据具体的策略对象,调用其算法的方法
            }
             //问题:出现基类比子类的可访问性低  原因:基类的访问修饰符比子类要低,因为C# 默认访问修饰符是private
        }
    }
}

UML 图


这个模式和状态模式的相同点:

1、消除条件语句

2、UML图类似

3、封装变化部分,都用聚合模式

4、状态模式运行时由状态改变,引发行为改变;策略模式运行时由需求不同,引发算法不同

不同点:

1、代码不同,为什么不同还没有清晰地认识

2、适用条件不同


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值