⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 strategyrealworld.cs

📁 使用C#程序将23个常用设计模式进行列表显示
💻 CS
字号:
using System;
using System.Windows.Forms;
using System.Collections;

//策略模式(Strategy pattern) -- ATL就是使用Strategy设计模式来实现线程的
//意图
//    定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。
//适用性
//    1.许多相关的类仅仅是行为有异。“策略”提供了一种用多个行为中的一个行为来配置一个类的方法。
//    2.需要使用一个算法的不同变体。例如,你可能会定义一些反映不同的空间/时间权衡的算法。当这些变体实现为一个算法的类层次时,可以使用策略模式。
//    3.算法使用客户不应该知道的数据。可使用策略模式以避免暴露复杂的、与算法相关的数据结构。
//    4.一个类定义了多种行为, 并且这些行为在这个类的操作中以多个条件语句的形式出现。将相关的条件分支移入它们各自的Strategy类中以代替这些条件语句。

namespace DesignPattern.StrategyRealWorld
{
    class StrategyRealWorld : AbstractPattern
    {
        public static void Run(TextBox tbInfo)
        {
            s_tbInfo = tbInfo;
            s_tbInfo.Text = "";

            // Two contexts following different strategies 
            SortedList studentRecords = new SortedList(); 
            studentRecords.Add("Samual"); 
            studentRecords.Add("Jimmy"); 
            studentRecords.Add("Sandra"); 
            studentRecords.Add("Vivek"); 
            studentRecords.Add("Anna"); 
            
            studentRecords.SetSortStrategy(new QuickSort()); 
            studentRecords.Sort(); 
            
            studentRecords.SetSortStrategy(new ShellSort()); 
            studentRecords.Sort(); 
            
            studentRecords.SetSortStrategy(new MergeSort()); 
            studentRecords.Sort(); 
            
            // Wait for user
            //Console.Read(); 
        }
    } 
    
    // "Strategy" 
    abstract class SortStrategy 
    {
        public abstract void Sort(ArrayList list); 
    }
    
    // "ConcreteStrategy" 
    class QuickSort : SortStrategy 
    {
        public override void Sort(ArrayList list) 
        {
            list.Sort(); 
            // Default is Quicksort 
            DesignPattern.FormMain.OutputInfo("QuickSorted list "); 
        }
    }
    
    // "ConcreteStrategy" 
    class ShellSort : SortStrategy 
    {
        public override void Sort(ArrayList list) 
        {
            //list.ShellSort(); not-implemented 
            DesignPattern.FormMain.OutputInfo("ShellSorted list "); 
        }
    }
    
    // "ConcreteStrategy" 
    class MergeSort : SortStrategy 
    {
        public override void Sort(ArrayList list) 
        {
            //list.MergeSort(); not-implemented 
            DesignPattern.FormMain.OutputInfo("MergeSorted list "); 
        }
    }

    // "Context" 
    class SortedList 
    {
        private ArrayList list = new ArrayList(); 
        private SortStrategy sortstrategy; 
        public void SetSortStrategy(SortStrategy sortstrategy) 
        {
            this.sortstrategy = sortstrategy; 
        }
        
        public void Add(string name) 
        {
            list.Add(name); 
        }
        public void Sort() 
        {
            sortstrategy.Sort(list); 
            // Display results 
            foreach (string name in list) 
            {
                DesignPattern.FormMain.OutputInfo(" " + name); 
            }
            DesignPattern.FormMain.OutputInfo(""); 
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -