MST
星途 面试题库

面试题:C++抽象类在策略模式中的应用

请简要描述策略模式的概念,并举例说明如何在C++中使用抽象类来实现策略模式。需要给出关键代码示例,包括抽象类的定义、具体策略类的实现以及如何在客户端代码中使用这些策略。
29.5万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试

策略模式概念

策略模式(Strategy Pattern)是一种行为型设计模式,它定义了一系列算法,将每个算法封装起来,并使它们可以相互替换。策略模式让算法的变化独立于使用算法的客户,使得代码具有更好的可维护性和扩展性。

C++ 中使用抽象类实现策略模式

抽象类定义

// 抽象策略类
class Strategy {
public:
    virtual void execute() const = 0;
    virtual ~Strategy() = default;
};

具体策略类实现

// 具体策略类A
class ConcreteStrategyA : public Strategy {
public:
    void execute() const override {
        std::cout << "执行策略A" << std::endl;
    }
};

// 具体策略类B
class ConcreteStrategyB : public Strategy {
public:
    void execute() const override {
        std::cout << "执行策略B" << std::endl;
    }
};

客户端代码使用策略

#include <iostream>
#include <memory>

int main() {
    // 使用策略A
    std::unique_ptr<Strategy> strategyA = std::make_unique<ConcreteStrategyA>();
    strategyA->execute();

    // 使用策略B
    std::unique_ptr<Strategy> strategyB = std::make_unique<ConcreteStrategyB>();
    strategyB->execute();

    return 0;
}

在上述代码中,Strategy 是抽象策略类,定义了所有具体策略类都需要实现的 execute 方法。ConcreteStrategyAConcreteStrategyB 是具体的策略类,分别实现了不同的 execute 行为。在客户端代码 main 函数中,通过创建具体策略类的对象,并调用 execute 方法来使用不同的策略。这样,当需要添加新的策略时,只需要创建新的具体策略类并实现 execute 方法,而不需要修改客户端代码,符合开闭原则。