zoukankan      html  css  js  c++  java
  • 行为型设计模式之策略模式(Strategy)

    结构
    意图 定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。
    适用性
    • 许多相关的类仅仅是行为有异。“策略”提供了一种用多个行为中的一个行为来配置一个类的方法。
    • 需要使用一个算法的不同变体。例如,你可能会定义一些反映不同的空间/时间权衡的算法。当这些变体实现为一个算法的类层次时[ H O 8 7 ] ,可以使用策略模式。
    • 算法使用客户不应该知道的数据。可使用策略模式以避免暴露复杂的、与算法相关的数据结构。
    • 一个类定义了多种行为, 并且这些行为在这个类的操作中以多个条件语句的形式出现。将相关的条件分支移入它们各自的S t r a t e g y 类中以代替这些条件语句。
     1 using System;
     2 
     3     
     4     abstract class Strategy 
     5     {
     6         abstract public void DoAlgorithm();
     7     }
     8 
     9     class FirstStrategy : Strategy 
    10     {
    11         override public void DoAlgorithm()
    12         {
    13             Console.WriteLine("In first strategy");            
    14         }
    15     }
    16 
    17     class SecondStrategy : Strategy 
    18     {
    19         override public void DoAlgorithm()
    20         {
    21             Console.WriteLine("In second strategy");            
    22         }
    23     }
    24 
    25     class Context 
    26     {
    27         Strategy s;
    28         public Context(Strategy strat)
    29         {
    30             s = strat;            
    31         }
    32 
    33         public void DoWork()
    34         {
    35             // some of the context's own code goes here
    36         }
    37 
    38         public void DoStrategyWork()
    39         {
    40             // now we can hand off to the strategy to do some 
    41             // more work
    42             s.DoAlgorithm();
    43         }
    44     }
    45 
    46     /// <summary>
    47     ///    Summary description for Client.
    48     /// </summary>
    49     public class Client
    50     {
    51         public static int Main(string[] args)
    52         {    
    53             FirstStrategy firstStrategy = new FirstStrategy();
    54             Context c = new Context(firstStrategy);
    55             c.DoWork();
    56             c.DoStrategyWork();
    57 
    58             return 0;
    59         }
    60     }
    策略模式
  • 相关阅读:
    创建react项目
    解决移动端弹窗下页面滚动问题
    前端常用的几种加密方式
    http请求状态码
    vue代理配置
    自动化测试实操案例详解 | Windows应用篇
    Google 再见 Java
    一次诡异的 SQL 数量统计查询不准的问题
    Maven
    淘宝技术分享:手淘亿级移动端接入层网关的技术演进之路
  • 原文地址:https://www.cnblogs.com/ziranquliu/p/4653409.html
Copyright © 2011-2022 走看看