C#如何实现策略模式 C#设计模式之策略模式详解
#技术教程 发布时间: 2026-01-13
策略模式通过接口封装可互换算法,实现“怎么做”与“谁来做”分离;定义统一策略接口和多个具体实现类,上下文持接口引用并委托执行,支持运行时切换;结合依赖注入可提升扩展性与测试性。
策略模式在C#中用于封装一组可互换的算法,让它们可以独立于使用它的客户端而变化。核心是把“怎么做”(算法)从“谁来做”(业务逻辑)中分离出来,通过接口统一行为,运行时动态切换具体实现。
定义策略接口与具体策略类
先声明一个公共策略接口,规定所有算法必须实现的方法;再为每种算法创建独立类,实现该接口。这样新增策略无需修改已有代码,符合开闭原则。
- 接口通常只包含一个核心方法(如Execute()),职责单一
- 每个具体策略类专注实现一种算法逻辑,不依赖其他策略
- 策略类通常是无状态的(不保存上下文数据),便于复用和线程安全
创建上下文类管理策略切换
上下文类持有一个策略接口的引用,提供设置和执行策略的入口。它不关心策略内部怎么实现,只负责委托调用。
- 构造函数或属性支持传入具体策略实例(推荐依赖注入方式)
- 可提供SetStrategy()方法在运行时更换策略
- 避免在上下文中写分支判断(如if-else选策略),把选择逻辑交给上层
在实际场景中应用策略模式
比如订单支付:微信支付、支付宝、银行卡支付可作为不同策略。客户端根据用户选择创建对应策略对象,传给支付上下文执行。
- UI层决定用哪种策略,new出对应实例(或由DI容器解析)
- 上下文调用strategy.Execute(order)完成支付,代码完全解耦
- 后续增加Apple Pay只需新增一个策略类,不改
上下文和原有策略
配合依赖注入提升灵活性
在.NET Core/6+项目中,可将策略注册为服务,利用工厂模式或命名服务按需解析。
- 用IServiceCollection.AddKeyedSingleton
("wechat") - 上下文接收IEnumerable
或Func 工厂 - 运行时根据配置或参数获取对应策略,更易扩展和测试
基本上就这些。策略模式不复杂但容易忽略边界——比如策略间共享数据时,应通过上下文传参而非静态变量;多个策略共用部分逻辑,可提取基类或工具类,但别破坏策略的独立性。
技术教程SEO上一篇 : ChatGPT在软件测试中的应用:提示技巧与效率提升
下一篇 : 交管12123在线访问入口 交管12123个人账号网页端官方入口
-
SEO外包最佳选择国内专业的白帽SEO机构,熟知搜索算法,各行业企业站优化策略!
SEO公司
-
可定制SEO优化套餐基于整站优化与品牌搜索展现,定制个性化营销推广方案!
SEO套餐
-
SEO入门教程多年积累SEO实战案例,从新手到专家,从入门到精通,海量的SEO学习资料!
SEO教程
-
SEO项目资源高质量SEO项目资源,稀缺性外链,优质文案代写,老域名提权,云主机相关配置折扣!
SEO资源
-
SEO快速建站快速搭建符合搜索引擎友好的企业网站,协助备案,域名选择,服务器配置等相关服务!
SEO建站
-
快速搜索引擎优化建议没有任何SEO机构,可以承诺搜索引擎排名的具体位置,如果有,那么请您多注意!专业的SEO机构,一般情况下只能确保目标关键词进入到首页或者前几页,如果您有相关问题,欢迎咨询!
上下文和原有策略