zoukankan      html  css  js  c++  java
  • 设计模式——Strategy模式

    8        Strategy模式

    8.1      概述

    策略模式主要应用于多种方法解决一个问题中,或一个东西有多种做法,现在只选择其中一种方法,将来可能会用另一种方法。就像一道题有多种算法,需要把这些不同的算法封装起来,达到使用无差别化。

    8.2      设计

    这个模式类似于Bridge模式,但是Bridge模式是为了封装实现部分,Strategy模式是为了封装某个步骤的多种算法。Strategy把这些算法抽象成一个类,直接使用其子类的对象实现具体的算法。

    8.3      实现

    UML图:

    示例代码为:
     1using System;
     2using System.Collections ;
     3
     4namespace Example
     5{
     6    /// <summary>
     7    /// 示例
     8    /// </summary>

     9    class Example
    10    {
    11        /// <summary>
    12        /// 应用程序的主入口点。
    13        /// </summary>

    14        [STAThread]
    15        static void Main(string[] args)
    16        {
    17            Context c = new Context() ;
    18            c.ContextInterface() ;
    19        }

    20        /// <summary>
    21        /// 使用策略的类
    22        /// </summary>

    23        public class Context
    24        {
    25            private Strategy s = null ;
    26            public void ContextInterface()
    27            {
    28                s = new ConcreteStrategyB() ;//决定使用哪个策略
    29                s.AlgorithmInterface() ;
    30            }

    31        }

    32        /// <summary>
    33        /// 策略抽象类,封装实现策略的接口
    34        /// </summary>

    35        public abstract class Strategy
    36        {
    37            public abstract void AlgorithmInterface() ;
    38        }

    39        /// <summary>
    40        /// A策略
    41        /// </summary>

    42        public class ConcreteStrategyA : Strategy
    43        {
    44            public override void AlgorithmInterface()
    45            {
    46                Console.WriteLine( "实现A算法" ) ;
    47            }

    48        }

    49        /// <summary>
    50        /// B策略
    51        /// </summary>

    52        public class ConcreteStrategyB : Strategy
    53        {
    54            public override void AlgorithmInterface()
    55            {
    56                Console.WriteLine( "实现B算法" ) ;
    57            }

    58        }

    59        /// <summary>
    60        /// C策略
    61        /// </summary>

    62        public class ConcreteStrategyC : Strategy
    63        {
    64            public override void AlgorithmInterface()
    65            {
    66                Console.WriteLine( "实现C算法" ) ;
    67            }

    68        }

    69    }

    70}

    71
  • 相关阅读:
    字符串分割并按大小排序
    为人之气
    RMQ
    线段树
    算法中的数学
    动态规划(DP)
    图的表示
    广度优先搜索(BFS)
    深度优先搜索(DFS)
    MyBatis(3.2.3)
  • 原文地址:https://www.cnblogs.com/fengchao/p/211935.html
Copyright © 2011-2022 走看看