编辑
2025-09-28
C#
00

目录

摘要
正文
结构
示例一:支付方式

摘要

策略模式是一种行为型设计模式,它允许在运行时选择算法的行为。通过将算法封装在独立的策略类中,客户端可以根据需要动态地切换算法,而无需修改使用算法的代码。

正文

结构

策略模式由三个主要组件组成:

  • 环境(Context):环境对象通过一个策略接口与客户端进行交互。它持有一个策略对象,并在需要时调用策略对象的方法。
  • 策略接口(Strategy Interface):策略接口定义了算法的通用方法。
  • 具体策略类(Concrete Strategies):具体策略类实现了策略接口,提供了不同的算法实现。

示例一:支付方式

假设我们正在开发一个电商平台,我们需要为用户提供多种支付方式,例如支付宝、微信支付和银行卡支付。我们希望能够根据用户的选择,动态地选择不同的支付方式进行支付。

首先,我们创建一个策略接口IPaymentStrategy,它定义了支付的通用方法:

C#
public interface IPaymentStrategy { void Pay(double amount); }

然后,我们创建三个具体策略类,分别实现了不同的支付方式:

C#
public class AlipayStrategy : IPaymentStrategy { public void Pay(double amount) { Console.WriteLine($"Using Alipay to pay {amount} dollars."); } } public class WeChatPayStrategy : IPaymentStrategy { public void Pay(double amount) { Console.WriteLine($"Using WeChat Pay to pay {amount} dollars."); } } public class BankCardStrategy : IPaymentStrategy { public void Pay(double amount) { Console.WriteLine($"Using Bank Card to pay {amount} dollars."); } }

接下来,我们创建一个环境类PaymentContext,它持有一个策略对象,并在需要时调用策略对象的方法:

C#
public class PaymentContext { private IPaymentStrategy _paymentStrategy; public void SetPaymentStrategy(IPaymentStrategy paymentStrategy) { _paymentStrategy = paymentStrategy; } public void Pay(double amount) { _paymentStrategy.Pay(amount); } }

现在,我们可以在客户端代码中使用策略模式来选择支付方式:

C#
static void Main(string[] args) { var paymentContext = new PaymentContext(); paymentContext.SetPaymentStrategy(new AlipayStrategy()); paymentContext.Pay(100.0); paymentContext.SetPaymentStrategy(new WeChatPayStrategy()); paymentContext.Pay(200.0); paymentContext.SetPaymentStrategy(new BankCardStrategy()); paymentContext.Pay(300.0); }

image.png

通过使用策略模式,我们可以根据需要动态地选择不同的支付方式,而无需修改客户端代码。策略模式可以用于各种场景,例如排序算法、日志记录等。希望本文对你理解策略模式有所帮助。

本文作者:技术老小子

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!