.NET高级面试指南专题十七【 策略模式模式介绍,允许在运行时选择算法的行为】

介绍:

策略模式是一种行为设计模式,它允许在运行时选择算法的行为。它定义了一系列算法,将每个算法封装到一个对象中,并使它们可以互相替换。这使得算法可独立于使用它的客户端变化。

原理:

策略接口(Strategy Interface) :定义一组算法的接口。
具体策略类(Concrete Strategy Classes) :实现策略接口的具体算法。
上下文类(Context Class):维护一个对策略对象的引用,并在运行时选择所需的具体策略。

优点:

灵活性: 能够在运行时动态地改变对象的行为。
可扩展性: 容易增加新的算法或策略。
复用性: 可以复用现有的算法,不需要重复实现。

缺点:

增加对象数量 :每个具体策略都会创建一个对象,可能会导致类的数量增加。
客户端必须知道策略:客户端需要了解不同的策略,以便选择正确的策略。

代码示例

csharp 复制代码
using System;

// 策略接口
interface IStrategy
{
    void Execute();
}

// 具体策略类A
class ConcreteStrategyA : IStrategy
{
    public void Execute()
    {
        Console.WriteLine("Executing strategy A");
    }
}

// 具体策略类B
class ConcreteStrategyB : IStrategy
{
    public void Execute()
    {
        Console.WriteLine("Executing strategy B");
    }
}

// 上下文类
class Context
{
    private IStrategy _strategy;

    public Context(IStrategy strategy)
    {
        _strategy = strategy;
    }

    public void SetStrategy(IStrategy strategy)
    {
        _strategy = strategy;
    }

    public void ExecuteStrategy()
    {
        _strategy.Execute();
    }
}

class Program
{
    static void Main(string[] args)
    {
        // 创建上下文对象
        Context context = new Context(new ConcreteStrategyA());

        // 执行策略A
        context.ExecuteStrategy();

        // 切换到策略B
        context.SetStrategy(new ConcreteStrategyB());

        // 执行策略B
        context.ExecuteStrategy();
    }
}
相关推荐
晨晖210 小时前
顺序查找:c语言
c语言·开发语言·算法
LYFlied11 小时前
【每日算法】LeetCode 64. 最小路径和(多维动态规划)
数据结构·算法·leetcode·动态规划
Salt_072811 小时前
DAY44 简单 CNN
python·深度学习·神经网络·算法·机器学习·计算机视觉·cnn
货拉拉技术11 小时前
AI拍货选车,开启拉货新体验
算法
MobotStone11 小时前
一夜蒸发1000亿美元后,Google用什么夺回AI王座
算法
Wang2012201311 小时前
RNN和LSTM对比
人工智能·算法·架构
xueyongfu12 小时前
从Diffusion到VLA pi0(π0)
人工智能·算法·stable diffusion
永远睡不够的入12 小时前
快排(非递归)和归并的实现
数据结构·算法·深度优先
cheems952712 小时前
二叉树深搜算法练习(一)
数据结构·算法
sin_hielo12 小时前
leetcode 3074
数据结构·算法·leetcode