0

0

C#如何实现策略模式 C#设计模式之策略模式详解

月夜之吻

月夜之吻

发布时间:2026-01-13 09:16:05

|

290人浏览过

|

来源于php中文网

原创

策略模式通过接口封装可互换算法,实现“怎么做”与“谁来做”分离;定义统一策略接口和多个具体实现类,上下文持接口引用并委托执行,支持运行时切换;结合依赖注入可提升扩展性与测试性。

c#如何实现策略模式 c#设计模式之策略模式详解

策略模式在C#中用于封装一组可互换的算法,让它们可以独立于使用它的客户端而变化。核心是把“怎么做”(算法)从“谁来做”(业务逻辑)中分离出来,通过接口统一行为,运行时动态切换具体实现。

定义策略接口与具体策略类

先声明一个公共策略接口,规定所有算法必须实现的方法;再为每种算法创建独立类,实现该接口。这样新增策略无需修改已有代码,符合开闭原则。

  • 接口通常只包含一个核心方法(如Execute()),职责单一
  • 每个具体策略类专注实现一种算法逻辑,不依赖其他策略
  • 策略类通常是无状态的(不保存上下文数据),便于复用和线程安全

创建上下文类管理策略切换

上下文类持有一个策略接口的引用,提供设置和执行策略的入口。它不关心策略内部怎么实现,只负责委托调用。

  • 构造函数或属性支持传入具体策略实例(推荐依赖注入方式)
  • 可提供SetStrategy()方法在运行时更换策略
  • 避免在上下文中写分支判断(如if-else选策略),把选择逻辑交给上层

在实际场景中应用策略模式

比如订单支付:微信支付、支付宝、银行卡支付可作为不同策略。客户端根据用户选择创建对应策略对象,传给支付上下文执行。

MaxAI
MaxAI

MaxAI.me是一款功能强大的浏览器AI插件,集成了多种AI模型。

下载
  • UI层决定用哪种策略,new出对应实例(或由DI容器解析)
  • 上下文调用strategy.Execute(order)完成支付,代码完全解耦
  • 后续增加Apple Pay只需新增一个策略类,不改上下文和原有策略

配合依赖注入提升灵活性

在.NET Core/6+项目中,可将策略注册为服务,利用工厂模式或命名服务按需解析。

  • IServiceCollection.AddKeyedSingleton("wechat")
  • 上下文接收IEnumerableFunc工厂
  • 运行时根据配置或参数获取对应策略,更易扩展和测试

基本上就这些。策略模式不复杂但容易忽略边界——比如策略间共享数据时,应通过上下文传参而非静态变量;多个策略共用部分逻辑,可提取基类或工具类,但别破坏策略的独立性。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

315

2023.08.02

if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

733

2023.08.22

硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

1015

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

62

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

378

2025.12.29

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

480

2023.08.10

页面置换算法
页面置换算法

页面置换算法是操作系统中用来决定在内存中哪些页面应该被换出以便为新的页面提供空间的算法。本专题为大家提供页面置换算法的相关文章,大家可以免费体验。

399

2023.08.14

Java 项目构建与依赖管理(Maven / Gradle)
Java 项目构建与依赖管理(Maven / Gradle)

本专题系统讲解 Java 项目构建与依赖管理的完整体系,重点覆盖 Maven 与 Gradle 的核心概念、项目生命周期、依赖冲突解决、多模块项目管理、构建加速与版本发布规范。通过真实项目结构示例,帮助学习者掌握 从零搭建、维护到发布 Java 工程的标准化流程,提升在实际团队开发中的工程能力与协作效率。

9

2026.01.12

c++主流开发框架汇总
c++主流开发框架汇总

本专题整合了c++开发框架推荐,阅读专题下面的文章了解更多详细内容。

101

2026.01.09

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号