新闻中心

C#怎么实现策略模式 C#设计模式之策略模式代码示例

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

c#怎么实现策略模式 c#设计模式之策略模式代码示例

策略模式是一种行为设计模式,它让你定义一系列算法或行为,并将它们封装在独立的类中,使它们可以互相替换。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 PictoGraphic

AI驱动的矢量插图库和插图生成平台

PictoGraphic 133 查看详情 PictoGraphic

客户端调用示例

在 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编译运行系统 

搜索