专栏首页技术之路设计模式:策略模式

设计模式:策略模式

今天说一下策略模式:定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户

换句话说策略模式,是指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法,比如吃东西的行为,有的人喜欢狼吞虎咽,有的人

喜欢细嚼慢咽,有的人喜欢边吃边说

策略模式的重心不是如何实现算法,而是如何组织、调用这些算法,从而让程序结构更灵活,具有更好的维护性和扩展性。

 看一下简单的代码实现

#region  策略模式

    #region  抽象策略
    public abstract class Stratety
    {
        public abstract void StrategyInterface();//子类要实现的方法
    }
    #endregion

    #region  具体策略
    public class ConcreteStrategyA:Stratety
    {
        public override void StrategyInterface()
        {
            Console.WriteLine("A:类A的实现方法");
        }
    }

    public class ConcreteStrategyB : Stratety
    {
        public override void StrategyInterface()
        {
            Console.WriteLine("B:类B的实现方法");
        }
    }

    public class ConcreteStrategyC : Stratety
    {
        public override void StrategyInterface()
        {
            Console.WriteLine("C:类C的实现方法");
        }
    }
    #endregion

    public class Context
    {
        Stratety stratety;

        public Context(Stratety f_Stratety)
        {
            stratety = f_Stratety;
        }

        public Context()
        {
        }

        public void ExecFun()
        {
            if (stratety != null)
                stratety.StrategyInterface();
        }
    }

    #endregion
static void Main(string[] args)
        {
          
            #region  策略模式

            Context _context;
            _context = new Context(new ConcreteStrategyA());
            _context.ExecFun();

            _context = new Context(new ConcreteStrategyB());
            _context.ExecFun();

            _context = new Context(new ConcreteStrategyC());
            _context.ExecFun();
            #endregion

            Console.ReadLine();
        }

策略模式的优点:      1.提供了管理相关算法族的方法。      2.可以避免使用多重条件转移语句。      缺点:      3.必须知道所有的具体策略类及它们的区别.      4.生成许多的策略类。 

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • WPF MVVM实现TreeView

    今天有点时间,做个小例子WPF MVVM 实现TreeView 只是一个思路大家可以自由扩展 文章最后给出了源码下载地址 图1 ?    图2     ? 模...

    lpxxn
  • 设计模式:命令模式

     今天说一下命令模式 命令模式 将请求封装成对象,以便使用不同的请求、队列或者日志来参数化其它对象。命令模式也支持可撤销的操作。这样将“行为请求者”与“行为实现...

    lpxxn
  • golang从context源码领悟接口的设计

    注:写帖子时go的版本是1.12.7 Context的github地址 go语言中实现一个interface不用像其他语言一样需要显示的声明实现接口。go语言...

    lpxxn
  • Java泛型你看这篇文章就对了

    泛型是Java中一个非常重要的知识点,在Java集合类框架中泛型被广泛应用。本文我们将从零开始来看一下Java泛型的设计,将会涉及到通配符处理,以及让人苦恼的类...

    JAVA葵花宝典
  • 不知道怎么封装代码?看看这几种设计模式吧!

    我们经常听说:“写代码要有良好的封装,要高内聚,低耦合”。那怎样才算良好的封装,我们为什么要封装呢?其实封装有这样几个好处:

    coder_koala
  • 创建数字货币交易系统开发公司提供安全稳定全球的一站式服务

    数字货币对于新时期的投资者来说非常具有吸引力,一些聪明的投资者知道,虽然数字货币目前不受到银行或政府的监管,但它仍然具有可以阻止人们作弊的过程,所以只要按照规则...

    小威互联说
  • Spring 注解开发之 @Conditional

    在 SpringBoot 中经常看到该注解及其衍生注解,它的作用是根据条件注入组件。

    wsuo
  • 『设计模式』撩妹秘籍竟是使用设计模式的抽象工厂模式

    如果存在一部撩妹的手机,加上一个后宫,请问你该怎么做? 砸了手机,跟老婆孩子好好过日子,本篇文章到此结束!

    风骨散人Chiam
  • MediaPlayer(一)--Android MediaPlayer的使用方法

    为了模拟实现Android MediaPlayer的实现,需要先了解下MediaPlayer的简单使用方法, 这里只列举其中一种使用方式, 以这个为模板利用ff...

    小蚂蚁与大象
  • 每天一道剑指offer-数组中只出现一次的数字

    考试结束,班级平均分只拿到了年级第二,班主任于是问道:大家都知道世界第一高峰珠穆朗玛峰,有人知道世界第二高峰是什么吗?正当班主任要继续发话,只听到角落默默响起来...

    乔戈里

扫码关注云+社区

领取腾讯云代金券