策略模式
策略模式 (Strategy Pattern)
策略模式是一种行为设计模式,它允许在运行时选择算法的实现。它通过将算法封装在独立的类中,使得算法可以互相替换,避免了使用条件语句的需求。
介绍#
策略模式定义了一系列算法,并将每个算法封装起来,使得它们可以相互替换。策略模式使得算法可以独立于使用它们的客户端变化。
UML 类图#
+------------------------------+
| Context |
|------------------------------|
| - strategy:Strategy |
| + SetStrategy(Strategy):void |
| + ExecuteStrategy():void |
+------------------------------+
|
|
v
+---------------------+
| Strategy |
|---------------------|
| + Execute():void |
+---------------------+
|
|
+---------+----------+
| |
v v
+---------------------+ +---------------------+
| ConcreteStrategyA | | ConcreteStrategyB |
|---------------------| |---------------------|
| + Execute():void | | + Execute():void |
+---------------------+ +---------------------+
示例代码#
策略接口#
// IStrategy.cs
public interface IStrategy
{
void Execute();
}
具体策略#
// ConcreteStrategyA.cs
public class ConcreteStrategyA : IStrategy
{
public void Execute()
{
Console.WriteLine("执行策略 A");
}
}
// ConcreteStrategyB.cs
public class ConcreteStrategyB : IStrategy
{
public void Execute()
{
Console.WriteLine("执行策略 B");
}
}
上下文类#
// Context.cs
public class Context
{
private IStrategy _strategy;
public void SetStrategy(IStrategy strategy)
{
_strategy = strategy;
}
public void ExecuteStrategy()
{
_strategy.Execute();
}
}
客户端代码#
// Program.cs
using System;
class Program
{
static void Main()
{
Context context = new Context();
// 使用策略 A
context.SetStrategy(new ConcreteStrategyA());
context.ExecuteStrategy();
// 切换到策略 B
context.SetStrategy(new ConcreteStrategyB());
context.ExecuteStrategy();
}
}
总结#
策略模式通过将算法封装在独立的类中,消除了条件语句的使用,使得算法可以独立于使用它们的客户端变化。这种模式提供了一种灵活的设计方式,使得程序更容易扩展和维护。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现