• 【设计模式】策略模式


    一、定义

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

    二、UML图:(来自百度百科

    根据上面的UML图,我们需要的类有:

    1)Content类

    2)Strategy抽象类

    3)若干ConcreteStrategy类

    三、写法:

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Text;
     4 
     5 namespace StudyDesign
     6 {
     7     //抽像算法类
     8     public abstract class Strategy
     9     {
    10         //算法方法
    11         public abstract void AlgorithmInterface();
    12     }
    13    
    14 
    15 
    16     //具体算法A
    17     public class ConcreteStrategyA:Strategy
    18     {
    19         //算法实现
    20         public override void AlgorithmInterface()
    21         {
    22           Console.WriteLine("算法实现A");  
    23         }
    24     }
    25 
    26 
    27     //具体算法B
    28     public class ConcreteStrategyB:Strategy
    29     {
    30         public override void AlgorithmInterface()
    31         {
    32             Console.WriteLine("算法实现B");  
    33         }
    34     }
    35 
    36 
    37     //具体算法C
    38     public class ConcreteStrategyC:Strategy
    39     {
    40         public override void AlgorithmInterface()
    41         {
    42             Console.WriteLine("算法实现C");
    43         }
    44     }
    45 
    46 
    47 
    48   
    49     public class Content
    50     {
    51         private Strategy strategy;
    52 
    53         public Content(Strategy strategy) //构造函数
    54         {
    55             this.strategy = strategy;
    56         }
    57        
    58         public void ContentInterface()  //方法
    59         {
    60             strategy.AlgorithmInterface();
    61         }
    62     }
    63 
    64 }

    四、调用:

     Content content;
     content=new Content(new ConcreteStrategyA());
     content.ContentInterface();
    
     content=new Content(new ConcreteStrategyB());
     content.ContentInterface();
    
     content=new Content(new ConcreteStrategyC());
     content.ContentInterface();

    五、特点:

    1. 所有这些算法完成的都是相同的工作。只是实现不同。

    2. 不用在一个大程序里if...else...了,频繁改动大程序还有风险

    3. 调用者必须知道有哪些算法

  • 相关阅读:
    Merge Sort
    important在css中的作用
    Quick Sort
    Shell's Sort
    2019年7月22日~28日 第四周学习记录
    eclipse安装心得和环境变量配置的体会
    2019年7月15日~7月21日 第三周学习记录
    2019年7月1日~7月7日 第一周学习记录
    程序为本,代码方式仅是语言 ———《大道至简软件工程实践者的思想》
    2019年7月8日~7月14日 第二周学习记录
  • 原文地址:https://www.cnblogs.com/lovecsharp094/p/5827487.html
Copyright © 2020-2023  润新知