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

    一、定义

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

    二、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. 调用者必须知道有哪些算法

  • 相关阅读:
    Tomcat全攻略
    JAVA必备——13个核心规范
    利用Node.js实现模拟Session验证的登陆
    Android中关于JNI 的学习(六)JNI中注冊方法的实现
    pomelo源代码分析(一)
    怎样解决栈溢出
    String,StringBuffer与StringBuilder的差别??
    ERWin 7.1 和7.2 的官方FTP下载地址
    C/C++中各种类型int、long、double、char表示范围(最大最小值)
    下拉刷新,上拉装载许多其他ListView
  • 原文地址:https://www.cnblogs.com/lovecsharp094/p/5827487.html
Copyright © 2011-2022 走看看