zoukankan      html  css  js  c++  java
  • C#策略模式 摘自jspcool

    C#策略模式  结构图
                                                                                                                                                 





    C#策略模式主要可以作用很轻松动态调用算法

    如上图 有3个算法 MergeSort    QuickSort    ShellSort  排序算法 都继承SortStrategy 抽象类

    最后通过 SortedList  以SortStrategy为基础进行包装 以便客户端动态调用

    public abstract class SortStrategy
    {

        abstract public void Sort(ArrayList list);
    }

    public class QuickSort : SortStrategy //这里是算法类
    {

        public override void Sort(ArrayList list)
        {
            list.Sort(); 
            HttpContext.Current.Response.Write("QuickSorted list");
        }
    }

    public class ShellSort : SortStrategy //这里是算法类
    {

        public override void Sort(ArrayList list)
        {
            //list.ShellSort();
            HttpContext.Current.Response.Write("ShellSorted list");
        }
    }

    public class MergeSort : SortStrategy //这里是算法类
    {

        public override void Sort(ArrayList list)
        {
            //list.MergeSort();
            HttpContext.Current.Response.Write("MergeSorted list ");
        }
    }



    SortedList 包装类 对  如下

    public class SortedList
    {

        private ArrayList list = new ArrayList();
        private SortStrategy sortstrategy;

      
        public void SetSortStrategy(SortStrategy sortstrategy)
        {
            this.sortstrategy = sortstrategy;
        }

      
        public void Sort()
        {
            sortstrategy.Sort(list);
        }
        
      
       public void Add(string name)
        {
            list.Add(name);
        }

        public void Display()
        {
            foreach (string name in list)
                HttpContext.Current.Response.Write(" " + name);
        }
    }

    客户端调用包装类如下

     SortedList studentRecords = new SortedList();
            studentRecords.Add("3");
            studentRecords.Add("2");
            studentRecords.Add("4");
            studentRecords.Add("1");
            studentRecords.Add("5");

            studentRecords.SetSortStrategy(new QuickSort());//调用QuickSort算法
            //studentRecords.SetSortStrategy(new ShellSort());//调用ShellSort算法
            //studentRecords.SetSortStrategy(new MergeSort ());//调用MergeSort 算法


            studentRecords.Sort();
            studentRecords.Display();


    Strategy策略模式适合下列场合:

      1.以不同的格式保存文件;

      2.以不同的算法压缩文件;

      3.以不同的算法截获图象;

      4.以不同的格式输出同样数据的图形,比如曲线 或框图bar等。


     

  • 相关阅读:
    query compiler
    non-deterministic-turing-machine
    What-are-P-NP-NP-complete-and-NP-hard
    查询优化器的算法
    Redis 和 I/O 多路复用
    Linux aio
    MySQL 的那些网络超时错误
    MYSQL performance
    jvmti
    JVM Troubleshooting
  • 原文地址:https://www.cnblogs.com/xiaobaigang/p/876534.html
Copyright © 2011-2022 走看看