当一个动作有多种实现方法,在实际使用时,需要根据不同情况选择某个方法执行动作,就可以考虑使用策略模式。

把动作抽象成接口,比如把玩球抽象成接口。

    public interface IBall
    {
        void Play();
    }

有可能是玩足球、篮球、排球等,把这些球类抽象成实现接口的类。

    public class Football : IBall
    {
        public void Play()
        {
            Console.WriteLine("我喜欢足球");
        }
    }
    public class Basketball : IBall
    {
        public void Play()
        {
            Console.WriteLine("我喜欢篮球");
        }
    }
    public class Volleyball : IBall
    {
        public void Play()
        {
            Console.WriteLine("我喜欢排球");
        }
    }

还有一个类专门用来选择哪种球类,并执行接口方法。

    public class SportsMan
    {
        private IBall ball;
        public void SetHobby(IBall myBall)
        {
            ball = myBall;
        }
        public void StartPlay()
        {
            ball.Play();
        }
    }

客户端需要让用户作出选择,根据不同的选择实例化具体类。

    class Program
    {
        static void Main(string[] args)
        {
            IBall ball = null;
            SportsMan man = new SportsMan();
            while (true)
            {
                Console.WriteLine("选择你喜欢的球类项目(1=足球, 2=篮球,3=排球)");
                string input = Console.ReadLine();
                switch (input)
                {
                    case "1":
                        ball = new Football();
                        break;
                    case "2":
                        ball = new Basketball();
                        break;
                    case "3":
                        ball = new Volleyball();
                        break;
                }
                man.SetHobby(ball);
                man.StartPlay();
            }
        }
    }

转载于:https://www.cnblogs.com/darrenji/p/3959904.html

用最简单的例子理解策略模式(Strategy Pattern)相关推荐

  1. 设计模式(一):“穿越火线”中的“策略模式”(Strategy Pattern)

    在前段时间呢陆陆续续的更新了一系列关于重构的文章.在重构我们既有的代码时,往往会用到设计模式.在之前重构系列的博客中,我们在重构时用到了"工厂模式"."策略模式" ...

  2. 8.6 GOF设计模式四: 策略模式… Strategy Pattern

    策略模式- Strategy Pattern  在POS系统中,有时需要实行价格优惠, 该如何处理?  对普通客户或新客户报全价  对老客户统一折扣5%  对大客户统一折扣10%  注:课件 ...

  3. 解读设计模式----策略模式(Strategy Pattern)

    一.模式概述      策略模式(Strategy Pattern)在外形上与状态模式很相似,但在意图上有些不同.其意图是使这些算法可以相互替换,并提供一种方法来选择最合适的算法.       在我应 ...

  4. 二十四种设计模式:策略模式(Strategy Pattern)

    策略模式(Strategy Pattern) 介绍 定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换.本模式使得算法的变化可独立于使用它的客户. 示例 有一个Message实体类,对它的操 ...

  5. 设计模式-策略模式(Strategy Pattern)

    Define a family of algorithms,encapsulate each one,and make them interchangeable(定义一组算法,将每个算法都封装起来,并 ...

  6. 策略模式Strategy Pattern应用场景

    策略模式(Strategy Pattern)是指定义了算法家族.分别封装起来,让它们之间可以互相替换,此模式让算法的变化不会影响到使用算法的用户. 策略模式的应用场景 1.假如系统中有很多类,而他们的 ...

  7. 锈才学设计模式之 —— 策略模式(Strategy Pattern)

    锈才学设计模式之  -- 策略模式 策略模式:把功能提供者单独封装成类,使它们可以互相替换使用,让功能提供者独立于使用者(调用者). 说明: 在面向对象编程中,我们尽量将功能(类)设计成复用,以符合O ...

  8. 策略模式(Strategy Pattern)

    算法与对象的耦合:     对象可能经常需要使用多种不同的算法,但是如果变化频繁,会将类型变得脆弱...             动机:     在软件构建过程中,某些对象使用的算法可能多种多样,经常 ...

  9. 设计模式实战-策略模式(Strategy Pattern)

    0 联系我 图片标题 1.Q群[Java开发技术交流]:jq.qq.com/?_wv=1027&a- 2.完整博客链接:www.shishusheng.com 3.知乎:www.zhihu.c ...

最新文章

  1. python基础代码事例-数据科学Python基础(附示例代码和练习题目)
  2. linux php7 安装redis扩展(php7可以使用自测)
  3. 航海学校高级课程任务讲义
  4. 剧透人生!你什么时候结婚换工作甚至狗带,Facebook都知道
  5. 聊一聊顺序消息(RocketMQ顺序消息的实现机制)
  6. Alpha冲刺报告(8/12)(麻瓜制造者)
  7. Java 算法 校门外的树
  8. Python:Python全球生态主站,pip安装方法、集成安装方法、文件安装方法、第三方库自动安装脚本
  9. php镂空窗,木窗镂空的雕刻象征着什么?黑色在彝族人民心中有何寓意?陆川猪为何是著名“陆川三宝”之一?...
  10. UmiJS 是一个 react 开发框架
  11. JavaScript内建对象
  12. 未能正确加载“Microsoft.VisualStudio.Editor.Implementation.EditorPackage”
  13. WordPress我安装成功了,容易!
  14. Java dicom查看_验证DICOM文件
  15. STM32F103实现CMSIS-DAP
  16. rms 文档权限服务器,Rms操作设置office系统文档权限
  17. java.io.IOException: Type mismatch in key from map: expected org.apache.hadoop.io.Text, recieved org
  18. 浏览器突然不能上网,DNS问题
  19. 在Java中产生随机数及掷骰子
  20. 数学公式编辑器:MathType 7 for mac

热门文章

  1. PHP中的 fastcgi_finish_request();
  2. C语言循环求出2的10次幂,C语言求2的100次幂的结果.doc
  3. 7nfs客户端没权限_Ant design pro v4-服务器菜单和路由权限控制
  4. python123第一周测试作业指导书_2017年我的第一周总结
  5. 利用javascript实现简体与繁体的转换
  6. python信用卡识别_python opencv实现信用卡的数字识别
  7. 计算机学业水平测试题及答案初中,初中信息技术学业水平考试试题30号试题.doc...
  8. HTTPS 传参数(Query String)安全吗?
  9. MATLAB的xlsread无法读入数据问题
  10. mysql某一列之前加一个球_MySQL作业:三色球,概率题,子查询【诗书画唱】