新闻中心
C#怎么实现策略模式 C#设计模式之策略模式代码示例
策略模式通过定义统一接口封装多种算法,使算法可互换且易于扩展。首先定义IPaymentStrategy接口声明Pay方法;接着实现AlipayStrategy和WeChatPayStrategy类提供具体支付逻辑;再创建PaymentContext类持有策略接口,通过构造函数或SetStrategy方法动态设置策略;客户端在Main中创建上下文并执行支付,输出分别为“使用支付宝支付 ¥299.99 元”和“使用微信支付 ¥188.00 元”。新增支付方式只需添加新类实现接口,无需修改现有代码,符合开闭原则。

策略模式是一种行为设计模式,它让你定义一系列算法或行为,并将它们封装在独立的类中,使它们可以互相替换。C# 中通过接口和多态特性能很好地实现策略模式。
定义策略接口
首先创建一个策略接口,声明所有支持的算法共有的操作:
public interface IPaymentStrategy
{
void Pay(double amount);
}
实现具体策略类
接下来编写具体的策略实现类,比如支付宝支付和微信支付:
public class AlipayStrategy : IPaymentStrategy
{
public void Pay(double amount)
{
Console.WriteLine($"使用支付宝支付 {amount:C} 元");
}
}
<p>public class WeChatPayStrategy : IPaymentStrategy
{
public void Pay(double amount)
{
Console.WriteLine($"使用微信支付 {amount:C} 元");
}
}
</font></p><H3>上下文类使用策略</H3><p>创建一个上下文类来接收并执行策略,客户端可根据需要动态切换:</p><font face="Courier New"><pre class="brush:php;toolbar:false;">
public class PaymentContext
{
private IPaymentStrategy _strategy;
<pre class='brush:php;toolbar:false;'>public PaymentContext(IPaymentStrategy strategy)
{
_strategy = strategy;
}
public void SetStrategy(IPaymentStrategy strategy)
{
_strategy = strategy;
}
public void ExecutePayment(double amount)
{
_strategy.Pay(amount);
}}
PictoGraphic
AI驱动的矢量插图库和插图生成平台
133
查看详情
客户端调用示例
在 Main 方法中演示如何使用不同的支付策略:
class Program
{
static void Main(string[] args)
{
var context = new PaymentContext(new AlipayStrategy());
context.ExecutePayment(299.99);
<pre class='brush:php;toolbar:false;'> // 切换为微信支付
context.SetStrategy(new WeChatPayStrategy());
context.ExecutePayment(188.00);
}}
输出结果:
使用支付宝支付 ¥299.99 元 使用微信支付 ¥188.00 元
通过这种方式,新增支付方式时只需添加新的策略类并实现接口,无需修改原有代码,符合开闭原则。基本上就这些,不复杂但容易忽略细节。
以上就是C#怎么实现策略模式 C#设计模式之策略模式代码示例的详细内容,更多请关注其它相关文章!
# 微信
# 微信支付
# 支付宝
# 4seo自学网
# 天津关键词排名工具
# 潜江房产网站推广价格
# 清远财税关键词排名方法
# 兼职网站建设推广人才
# 北京视频推广营销
# 洛阳网站权重优化
# 现代网站建设视频
# 网站正在建设中
# 没有产品如何做营销推广
# 是一种
# 很好
# 开闭
# 如何实现
# 支付方式
# 创建一个
# 多态
# 客户端
# 只需
# c#
# ai
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
J*a应用程序首次运行自动创建文件与目录的最佳实践
Lar*el头像管理:图片缩放与旧文件删除的最佳实践
J*aScript教程:根据元素文本内容动态设置背景色
钉钉视频会议声音异常如何处理 钉钉会议音频修复技巧
不同用户不同价格! 索尼开启账户个性化定价测试
c++如何实现一个简单的软件渲染器_c++从零开始的3D图形学
Go Martini框架:动态服务解码后的图片内容
AO3官方可用镜像 Archive of Our Own网页版最新入口
写好的html代码怎么运行出来_运行写好的html代码方法【教程】
在React函数组件中利用原生HTML5进行邮箱地址验证
Steam官网入口直达 Steam注册及登录步骤
Django AJAX 文件上传教程:解决图片无法保存到模型的常见问题
ACG动漫手机版官网入口 手机ACG动漫APP在线观看正版
虫虫漫画精品漫画官网_虫虫漫画精品漫画官网进入精品漫画
Go语言中对Map值调用带指针接收者方法:原理与最佳实践
Yandex官网搜索引擎免登录_俄罗斯Yandex一键直达入口
初次安装JDK时环境变量如何正确配置_J*A_HOME与PATH设置规则讲解
如何在Python中使用Optional类型处理可变对象并避免Pylint警告
一加手机电池耗电快怎么办_一加手机电池耗电快的解决方法
妖精漫画网页版登录入口免费_妖精漫画官网主页直接阅读漫画
msn官网入口地址手机版 msn官方网站手机最新链接
天眼查企业查询官网入口 天眼查官方网页版查询
Windows10怎么开启夜间模式 Windows10系统设置调整色温与亮度缓解夜间用眼疲劳【教程】
在命令行怎么运行html项目_命令行运行html项目方法【教程】
谷歌邮箱注册显示错误Gmail服务器异常与延迟处理
R星幕后开发视频泄露 包含《GTA6》等多款大作
照顾宝贝2小游戏免费秒玩入口
在Go Martini框架中高效服务动态生成图像的实践指南
Node.js 中使用 node-cron 实现定时 API 数据抓取与处理
正确连接J*aScript到HTML实现可点击图片与自定义事件处理
J*aScript map 方法中处理循环元素为空数组的策略
在J*a中如何使用Exception包装底层异常_异常包装与信息传递方法说明
Surface怎么安装系统 微软Surface Pro U盘重装win11教程
NetBeans Ant项目:自动化将资源文件复制到dist目录的教程
zookeeper 都有哪些功能?
腾讯视频怎么使用多账号家庭管理_腾讯视频家庭多账号统一管理与权限分配教程
处理嵌套交互式控件:前端可访问性指南
深入理解字体排版:Adobe光学字偶距与CSS字偶距的差异与实现
Composer的 "licenses" 命令如何帮助你遵守开源协议_检查项目依赖的许可证合规性
J*aScript中正确使用querySelectorAll与复杂CSS选择器
Win11截图该按哪些键 Win11截屏完整流程解析【教程】
Lar*el用户头像管理:实现图片缩放、存储与旧文件安全删除的最佳实践
QQ邮箱官方登录入口_QQ邮箱网页版快捷使用平台
163邮箱登录密码 163邮箱忘记密码找回
PDO预处理语句中冒号的正确处理:区分SQL函数格式与命名占位符
如何解决电商平台定制报价请求的“黑洞”问题,SprykerQuoteRequest模块助你提升客户体验与销售效率
基于动态规划的房屋花卉种植最小成本算法详解
在J*a中如何开发简易博客标签推荐系统_博客标签推荐项目实战解析
Eclipse怎么运行工程_Eclipse工程运行配置说明
sublime如何配置Go语言开发环境_sublime搭建Golang编译运行系统


2025-11-23
浏览次数:次
返回列表
context.SetStrategy(new WeChatPayStrategy());
context.ExecutePayment(188.00);
}