设计模式二:策略模式 (Strategy Pattern)

策略模式是一种行为设计模式,它定义类一系列算法,并将每个算法封装起来,使它们可以互相替换,且算法 的变化不会影响使用算法 的客户端。

主要组成

  1. 策略接口 (Strategy Interface)

    • 定义所有支持的算法或行为的公共接口
  2. 具体策略类 (Concrete Strategies)

    • 实现策略接口的具体算法或行为
  3. 上下文类 (Context)

    • 持有一个策略对象的引用

    • 提供一个接口让策略对象访问其数据

    • 可以定义一个接口让策略对象返回计算结果

优点

  • 开闭原则:可以在不修改上下文类的情况下引入新策略

  • 消除条件语句:避免使用大量的条件语句来选择不同的算法

  • 算法复用:可以在不同的环境中复用相同的策略

适用场景

  • 当需要在运行时选择不同的算法变体时

  • 当一个类有多种行为,且这些行为以多个条件语句的形式出现时

  • 当需要隔离算法的实现细节与使用它的代码时

代码比较

非策略模式代码
复制代码
class doWorkClass
{
	int doWork()
	{
		if (...) {
			...
		}
		else if (...) {
			...
		}
		.
		.
		//每增加一种算法就往后面添加if else 违背了开闭原则,
	}

};

策略模式代码

复制代码
//基类
class doWorkBase
{
public:
	virtual int doWork() = 0;

	virtual ~doWorkBase();
};

//继承类,重写虚函数实现
class doWorkClass1 : public doWorkBase {
public:
	int doWork() override
	{
		......
	}
};

class doWorkClass2 : public doWorkBase {
public:
	int doWork() override
	{
		......
	}
};

//调用类,通过调用不同的子类对象实现不同的算法
class workClass
{
public:
    void setDoWork(doWorkBase * doWork)
    {
        m_pDoWork = doWork;
    }

	void doWork()
	{
		m_pDoWork->doWork();
	}

private:
	doWorkBase *m_pDoWork;

};

uml结构

相关推荐
梓仁沐白1 小时前
【Agent 设计模式】多智能体协作
microsoft·设计模式·php
努力学习的廖同学1 小时前
前端进阶-设计模式
设计模式
Eric Woo X2 小时前
macOS 旧版本无法启动 Steam ?一条命令恢复运行(2026年7月实测)
macos·策略模式
workflower1 天前
情境感知系统
人工智能·机器学习·设计模式·自然语言处理·机器人
咖啡八杯1 天前
设计模式中的原则
设计模式·接口隔离原则·里氏替换原则·开闭原则·合成复用原则·单一职责原则
安冬的码畜日常1 天前
【工欲善其事】深入理解 Node.js 带并发上限的异步任务批量执行逻辑
javascript·设计模式·node.js·ai编程·异步编程·并发执行
AI大法师2 天前
一个机场如何被做成 IP 场景:宝可梦机场的设计方法总结
大数据·人工智能·设计模式·新媒体运营
晚安code2 天前
干掉成山的 if-else:工厂造、策略选,一文讲透两个模式的配合
后端·设计模式
workflower2 天前
从幻觉,到现实
人工智能·深度学习·机器学习·设计模式·机器人
电子科技圈2 天前
第二代无线平台历久弥新,赋能物联网创新迭代
人工智能·嵌入式硬件·mcu·物联网·设计模式·硬件架构·iot