C# 实现简单的策略模式

简介: 策略模式定义算法族,封装可互换的算法,使算法变化独立于客户端。通过接口统一调用,支持动态切换排序方式,如冒泡排序与快速排序,提升系统灵活性与可扩展性。

定义算法家族,封装每个算法,使它们可以互相替换,算法变化不影响客户端。

// 策略接口
public interface ISortStrategy
{
    void Sort(List<int> list);
}
// 冒泡排序策略
public class BubbleSort : ISortStrategy
{
    public void Sort(List<int> list)
    {
        Console.WriteLine("使用冒泡排序");
        for (int i = 0; i < list.Count - 1; i++)
        {
            for (int j = 0; j < list.Count - i - 1; j++)
            {
                if (list[j] > list[j + 1])
                {
                    (list[j], list[j + 1]) = (list[j + 1], list[j]);
                }
            }
        }
    }
}
// 快速排序策略
public class QuickSort : ISortStrategy
{
    public void Sort(List<int> list)
    {
        Console.WriteLine("使用快速排序");
        QuickSortInternal(list, 0, list.Count - 1);
    }
    private void QuickSortInternal(List<int> list, int left, int right)
    {
        // 快速排序实现逻辑
    }
}
// 上下文类
public class Sorter
{
    private ISortStrategy _strategy;
    public Sorter(ISortStrategy strategy) => _strategy = strategy;
    public void SetStrategy(ISortStrategy strategy) => _strategy = strategy;
    public void SortList(List<int> list) => _strategy.Sort(list);
}
// 调用示例
public static void TestStrategy()
{
    var list = new List<int> { 3, 1, 4, 1, 5, 9 };
    var sorter = new Sorter(new BubbleSort());
    sorter.SortList(list);
    sorter.SetStrategy(new QuickSort());
    sorter.SortList(list);
}
相关文章
|
2天前
|
C#
C# 实现图片压缩工具(基础版)
基于 System.Drawing 实现图片尺寸缩放与质量压缩,支持常见格式。通过计算缩放比例生成新图像,并调整压缩质量以减小文件大小。适用于 .NET 平台,需安装 System.Drawing.Common NuGet 包。
|
2天前
|
C#
C# 实现简单的定时任务工具
基于 `System.Timers.Timer` 实现定时任务,支持周期性与单次执行。通过封装 Timer 类,提供启动、停止功能,并包含异常处理,确保任务稳定运行,适用于后台定时操作场景。
|
2天前
|
网络协议 C#
C# 实现 IP 地址有效性验证
通过正则表达式与IPAddress类双重验证IP地址,支持IPv4和IPv6格式校验,确保地址有效性。代码示例展示了高效、可靠的验证方法。
|
2天前
|
C# 索引
C# 循环结构:for/foreach/while 效率对比
循环用于重复执行代码,根据场景选择:for 适合已知次数,foreach 简洁遍历集合,while 适用于条件控制。示例演示遍历商品价格列表并计算总和,展示三种循环的用法与差异。(239字)
|
2天前
|
C#
C# 实现简单的 Excel 数据写入工具
基于EPPlus库实现C#将数据写入Excel文件,支持自定义表头与多行数据,自动调整列宽,操作简便,适用于非商业场景的数据导出需求。
|
2天前
|
网络协议 安全 C#
C# 实现基于 TCP 的简单聊天程序(服务端)
基于TcpListener实现TCP聊天服务器,监听指定端口,接收客户端连接并实时转发消息。支持多客户端并发通信,新连接自动加入广播列表,断开后自动移除,确保线程安全与稳定运行。
|
2天前
|
安全 C# 数据安全/隐私保护
C# 实现验证码 + 登录的整合案例
整合图形验证码与用户登录功能,实现安全的登录验证流程。系统生成验证码图片并校验输入,结合用户名密码双重验证,提升账户安全性,有效防止自动化攻击。
|
2天前
|
C#
C# 条件判断:if-else 与 switch 的实用场景
条件判断是流程控制的核心。if-else适用于多级条件判断,如根据积分决定会员等级;switch适用于多值匹配,C# 7.0+支持字符串和数值匹配,可清晰处理会员等级对应的优惠策略。
|
2天前
|
存储 安全 C#
C# 数组与集合:List<T> 最常用场景
数组长度固定,集合(List&lt;T&gt;)可动态增删,支持泛型与类型安全。常用操作包括添加、删除、遍历和查询元素,是开发中首选的动态数据存储方式。
|
2天前
|
算法 C# 容器
C# 实现简单的迭代器模式
迭代器模式提供一种顺序访问聚合对象元素的方法,无需暴露其内部结构。通过定义统一的迭代接口,实现对不同集合的遍历操作,增强容器的封装性和算法的复用性。

热门文章

最新文章