当前位置: 首页 > article >正文

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

  1. 策略模式(Strategy Pattern)
    定义
    策略模式定义了一系列算法(或操作),并将每个算法封装在一个类中,使它们可以互换。策略模式的核心思想是将选择算法的责任从使用算法的类中分离出来,从而使得算法可以独立变化。

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

2.1 定义策略接口

cpp
// ConnectionStrategy.h
#ifndef CONNECTION_STRATEGY_H
#define CONNECTION_STRATEGY_H

class ConnectionStrategy {
public:
    virtual void connect() = 0;
    virtual ~ConnectionStrategy() {}
};

#endif // CONNECTION_STRATEGY_H


2.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 定义了连接的接口。


http://www.kler.cn/a/396918.html

相关文章:

  • Ubuntu中使用纯命令行进行Android开发
  • 算法魅力-二分查找实战
  • 【大数据测试 Hive数据库--保姆级教程】
  • WSL与Ubuntu系统--使用Linux
  • C/C++静态库引用过程中出现符号未定义的处理方式
  • 【2025最新计算机毕业设计】基于SpringBoot+Vue电脑在线装机指南教程网站【源码+文档】
  • 任务函数分析
  • 常用字符串和集合处理工具类
  • 微信小程序实战篇-分类页面制作
  • 【LINUX相关】
  • EHOME视频平台EasyCVR多品牌摄像机视频平台监控视频编码H.265与Smart 265的区别?
  • 硬件工程师面试题分析
  • DAY120java审计第三方组件依赖库挖掘FastjsonShiroLog4jH2DB
  • uniapp vuex的使用
  • 检查Android设备当前的声音模式
  • 雨晨 25H2 Windows 11 企业版 极简 27749.1000
  • 速通前端篇 —— HTML
  • 了解 Solon MVC 的参数注入规则
  • 鸿蒙实现 web 传值
  • Ubuntu24 上安装搜狗输入法
  • 算法编程题-区间最小数乘区间和的最大值,基于数组中的数字拼接可得的小于目标值的最大数
  • java集合—List常用的方法
  • 性能优化、安全
  • 在Linux环境下部署TiDB可以通过几种不同的方法
  • 【学术论文投稿】云原生后端:解锁高效可扩展应用的魔法世界
  • 深度学习transformer