MST

星途 面试题库

面试题:C#中策略模式在复杂业务逻辑架构中的优化

假设在一个C#开发的电商系统中,有多种不同的促销策略(如满减、打折、赠品)。请使用策略模式对这部分业务逻辑进行架构设计,说明每个组件的职责,并提供关键的C#代码示例,同时阐述这种设计相比传统的条件判断方式有哪些优势。
45.3万 热度难度
编程语言C#

知识考点

AI 面试

面试题答案

一键面试

策略模式架构设计及组件职责

  1. 抽象策略接口(IPromotionStrategy):定义促销策略的公共方法,所有具体的促销策略都要实现这个接口。其职责是为不同的促销策略提供统一的抽象,使得客户端可以以一致的方式调用不同的促销策略。
  2. 具体策略类(如FullReduceStrategy、DiscountStrategy、GiftStrategy):实现抽象策略接口中定义的方法,具体实现满减、打折、赠品等不同的促销逻辑。每个具体策略类负责实现特定的促销算法。
  3. 上下文类(PromotionContext):持有一个抽象策略接口的引用,通过构造函数或属性注入具体的策略对象。其职责是将客户端的请求委托给具体的策略对象来处理,隔离客户端与具体策略实现的耦合。

关键C#代码示例

// 抽象策略接口
public interface IPromotionStrategy
{
    void ApplyPromotion();
}

// 满减策略具体类
public class FullReduceStrategy : IPromotionStrategy
{
    public void ApplyPromotion()
    {
        Console.WriteLine("应用满减促销策略");
    }
}

// 打折策略具体类
public class DiscountStrategy : IPromotionStrategy
{
    public void ApplyPromotion()
    {
        Console.WriteLine("应用打折促销策略");
    }
}

// 赠品策略具体类
public class GiftStrategy : IPromotionStrategy
{
    public void ApplyPromotion()
    {
        Console.WriteLine("应用赠品促销策略");
    }
}

// 上下文类
public class PromotionContext
{
    private IPromotionStrategy _promotionStrategy;

    public PromotionContext(IPromotionStrategy promotionStrategy)
    {
        _promotionStrategy = promotionStrategy;
    }

    public void ExecutePromotion()
    {
        _promotionStrategy.ApplyPromotion();
    }
}

使用示例

class Program
{
    static void Main()
    {
        PromotionContext promotionContext = new PromotionContext(new FullReduceStrategy());
        promotionContext.ExecutePromotion();

        promotionContext = new PromotionContext(new DiscountStrategy());
        promotionContext.ExecutePromotion();

        promotionContext = new PromotionContext(new GiftStrategy());
        promotionContext.ExecutePromotion();
    }
}

策略模式相比传统条件判断方式的优势

  1. 可维护性:传统条件判断方式中,促销逻辑都写在一个大的条件语句中,当新增或修改一种促销策略时,需要在该条件语句中进行修改,容易导致代码混乱且难以维护。而策略模式将每种促销策略封装在单独的类中,新增或修改策略只需修改对应的具体策略类,不影响其他代码。
  2. 可扩展性:策略模式使得新增促销策略变得非常容易,只需要创建一个新的具体策略类实现抽象策略接口即可,不需要修改现有的条件判断逻辑。而传统条件判断方式需要在原有的庞大条件语句中添加新的分支,增加了出错的风险。
  3. 代码复用:不同的促销策略类可以在不同的地方复用,而传统条件判断方式中,促销逻辑紧密耦合在条件语句中,难以复用。
  4. 符合开闭原则:策略模式符合开闭原则,即对扩展开放,对修改关闭。可以在不修改现有代码的情况下添加新的促销策略,而传统条件判断方式每次新增策略都需要修改条件判断代码。