惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 叶小钗
Microsoft Azure Blog
Microsoft Azure Blog
Stack Overflow Blog
Stack Overflow Blog
Jina AI
Jina AI
Vercel News
Vercel News
H
Help Net Security
Martin Fowler
Martin Fowler
美团技术团队
云风的 BLOG
云风的 BLOG
Y
Y Combinator Blog
阮一峰的网络日志
阮一峰的网络日志
MyScale Blog
MyScale Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 三生石上(FineUI控件)
博客园 - 司徒正美
人人都是产品经理
人人都是产品经理
Engineering at Meta
Engineering at Meta
G
Google Developers Blog
Blog — PlanetScale
Blog — PlanetScale
MongoDB | Blog
MongoDB | Blog
宝玉的分享
宝玉的分享
小众软件
小众软件
T
Tailwind CSS Blog
WordPress大学
WordPress大学

博客园 - 点点滴滴

C#操作IIS的代码 恢复误删数据(SQL Server 2000)--Log Explorer 如何让ClickOnce进行手动更新(含代码) - 点点滴滴 - 博客园 BackgroundWorker 组件 获取VS.NET 自带的数据库连接对话框的数据库连接 搜索一个局域网中所有的SQL Server服务器 Application.DoEvent() 在C#使用XML注释 用IDisposable接口释放.NET资源 正确的重载operator 很好的debug有理由不用吗 C#调用API访问其它进程 抽象 虚方法 接口 的区别 ASP.NET AJAX 路线图 ASP.NET AJAX 概述 安装ASP.NET AJAX Visitor Template Method State
Strategy
点点滴滴 · 2006-10-29 · via 博客园 - 点点滴滴
// Strategy pattern -- Real World example

using System;
using System.Collections;

namespace DoFactory.GangOfFour.Strategy.RealWorld
{
  
  // MainApp test application

class MainApp
  {
    static void Main()
    {
      // 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
      Console.WriteLine("QuickSorted list ");
    }
  }

// "ConcreteStrategy"

class ShellSort : SortStrategy
  {
    public override void Sort(ArrayList list)
    {
      //list.ShellSort(); not-implemented
      Console.WriteLine("ShellSorted list ");
    }
  }

// "ConcreteStrategy"

class MergeSort : SortStrategy
  {
    public override void Sort(ArrayList list)
    {
      //list.MergeSort(); not-implemented
      Console.WriteLine("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)
      {
        Console.WriteLine(" " + name);
      }
      Console.WriteLine();
    }
  }
}