欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 会展 > c++设计模式之策略模式

c++设计模式之策略模式

2024/11/19 19:34:54 来源:https://blog.csdn.net/jjjxxxhhh123/article/details/143785686  浏览:    关键词:c++设计模式之策略模式
  1. 策略模式(Strategy Pattern)
    定义
    策略模式定义了一系列算法(或操作),并将每个算法封装在一个类中,使它们可以互换。策略模式的核心思想是将选择算法的责任从使用算法的类中分离出来,从而使得算法可以独立变化。

应用场景
当系统需要根据不同的条件选择不同的算法或行为时,策略模式是一个理想的解决方案。
例如,监控软件在与不同型号的交换机交互时,可能需要根据交换机的配置策略、管理需求等选择不同的操作策略。
结构
Context(上下文):使用策略的对象,持有一个对策略的引用,并委托任务给具体的策略对象。
Strategy(策略接口):定义一个接口,所有的具体策略类都实现该接口。
ConcreteStrategy(具体策略类):实现具体的算法或操作。
代码示例
假设我们需要根据不同的网络环境选择不同的连接策略(例如,基于串口、SSH或Telnet连接设备)。

2.1 定义策略接口

cpp
// ConnectionStrategy.h
#ifndef CONNECTION_STRATEGY_H
#define CONNECTION_STRATEGY_Hclass ConnectionStrategy {
public:virtual void connect() = 0;virtual ~ConnectionStrategy() {}
};#endif // CONNECTION_STRATEGY_H2.2 定义具体策略类
cpp
// SerialConnection.h
#ifndef SERIAL_CONNECTION_H
#define SERIAL_CONNECTION_H#include "ConnectionStrategy.h"
#include <iostream>class SerialConnection : public ConnectionStrategy {
public:void connect() override {std::cout << "Connecting via Serial Port..." << std::endl;}
};#endif // SERIAL_CONNECTION_H
cpp
// SSHConnection.h
#ifndef SSH_CONNECTION_H
#define SSH_CONNECTION_H#include "ConnectionStrategy.h"
#include <iostream>class SSHConnection : public ConnectionStrategy {
public:void connect() override {std::cout << "Connecting via SSH..." << std::endl;}
};#endif // SSH_CONNECTION_H
2.3 定义上下文类
cpp
// NetworkManager.h
#ifndef NETWORK_MANAGER_H
#define NETWORK_MANAGER_H#include "ConnectionStrategy.h"class NetworkManager {
private:ConnectionStrategy* connectionStrategy;public:NetworkManager(ConnectionStrategy* strategy) : connectionStrategy(strategy) {}void setConnectionStrategy(ConnectionStrategy* strategy) {connectionStrategy = strategy;}void connect() {connectionStrategy->connect();}
};#endif // NETWORK_MANAGER_H
2.4 使用策略
cpp
// Main.cpp
#include "NetworkManager.h"
#include "SerialConnection.h"
#include "SSHConnection.h"int main() {ConnectionStrategy* serial = new SerialConnection();ConnectionStrategy* ssh = new SSHConnection();NetworkManager manager(serial);manager.connect();  // Output: Connecting via Serial Port...manager.setConnectionStrategy(ssh);manager.connect();  // Output: Connecting via SSH...delete serial;delete ssh;return 0;
}

解释
ConnectionStrategy 定义了连接的接口。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com