帮我写个例子调用这个策略和抽象工厂模式
时间: 2024-09-20 14:04:22 浏览: 66
策略模式 + 抽象工厂实现多方式登录验证
当然,这里是一个简单的C++代码示例,演示如何通过工厂模式和策略模式来调用不同类型的策略。
假设我们有如下的类结构:
```cpp
#include <memory>
#include <string>
// 操作接口
class IOperation {
public:
virtual ~IOperation() {}
virtual void executeTask() = 0;
};
// 抽象工厂
class AbstractFactory {
public:
virtual ~AbstractFactory() {}
virtual std::unique_ptr<IOperation> createStrategy(const std::string& taskType) = 0;
};
// 注册策略
class RegisterStrategy : public IOperation {
public:
void executeTask() override {
std::cout << "Executing Register Task..." << std::endl;
}
};
// 匹配策略
class MatchStrategy : public IOperation {
public:
void executeTask() override {
std::cout << "Executing Match Task..." << std::endl;
}
};
// 抽象工厂实现
class ConcreteFactory : public AbstractFactory {
public:
std::unique_ptr<IOperation> createStrategy(const std::string& taskType) {
if (taskType == "register") {
return std::make_unique<RegisterStrategy>();
} else if (taskType == "match") {
return std::make_unique<MatchStrategy>();
} else {
throw std::runtime_error("Invalid task type");
}
}
};
// 工厂类使用者
class Client {
private:
std::shared_ptr<AbstractFactory> factory;
public:
void setFactory(AbstractFactory* factory) {
this->factory = factory;
}
void executeTask(const std::string& taskType) {
try {
auto strategy = factory->createStrategy(taskType);
strategy->executeTask();
} catch (const std::exception& e) {
std::cerr << "Error: " << e.what() << std::endl;
}
}
};
int main() {
ConcreteFactory factory;
Client client;
client.setFactory(&factory);
// 调用策略
client.executeTask("register"); // 输出: Executing Register Task...
client.executeTask("match"); // 输出: Executing Match Task...
return 0;
}
```
在这个例子中,`Client`类负责调用工厂方法来创建策略,然后执行相应的任务。你可以根据需要更换任务类型来切换使用的策略。
阅读全文