zoukankan      html  css  js  c++  java
  • 设计模式之策略模式

    原文地址:http://www.cnblogs.com/sanduo8899/p/3728288.html

    概念:

     策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。

    UML结构图:

     

    适用场景:

     1、 多个类只区别在表现行为不同,可以使用Strategy模式,在运行时动态选择具体要执行的行为。
     2、 需要在不同情况下使用不同的策略(算法),或者策略还可能在未来用其它方式来实现。
     3、 对客户隐藏具体策略(算法)的实现细节,彼此完全独立。
     
    那么现在我们将上面的小段子用程序简单的来表示一下

    类关系图:

     

    代码:(很简单就不做注释了,Sorry~)

    复制代码
     1     /// <summary>
     2     /// Strategy类
     3     /// </summary>
     4     abstract class Answer
     5     {
     6         public abstract void GetAnswer();
     7     }
     8 
     9     class Computer : Answer
    10     {
    11         public override void GetAnswer()
    12         {
    13             Console.WriteLine("使用计算机可以获知正确答案");
    14         }
    15     }
    16     class Friend : Answer
    17     {
    18         public override void GetAnswer()
    19         {
    20             Console.WriteLine("求助朋友可以获知正确答案");
    21         }
    22     }
    23     class Himself : Answer
    24     {
    25         public override void GetAnswer()
    26         {
    27             Console.WriteLine("凭借他自己的记忆可以获知正确答案");
    28         }
    29     }
    30     /// <summary>
    31     /// Context类
    32     /// </summary>
    33     class Player
    34     {
    35         private Answer answer;
    36         public Player(Answer answer)
    37         {
    38             this.answer = answer;
    39         }
    40         public void Operation()
    41         {
    42             answer.GetAnswer();
    43         }
    44     }
    45 
    46     /// <summary>
    47     /// 客户端调用
    48     /// </summary>
    49     class 策略模式
    50     {
    51         public static void Main()
    52         {
    53             Player player = new Player(new Friend());
    54             player.Operation();
    55             Console.ReadLine();
    56         }
    57     }
    复制代码

    参考资料:

    • 百度百科:策略模式
    • C#设计模式(李建忠)
  • 相关阅读:
    C#中页面之间跳转方法比较
    C#中web页面之间传递数组参数
    js跳转传递参数
    枚举
    js操作做GridView
    数据库登录问题汇总
    数据库登录遇到的问题
    关于配置服务器(IIS7)(二)
    关于配置服务器(IIS7)
    使用JavaScript设置、获取父子页面中的值
  • 原文地址:https://www.cnblogs.com/niaowo/p/3730036.html
Copyright © 2011-2022 走看看