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

交易引擎中的设计模式

在WtHftEngine.cpp中,主要运用了以下几种设计模式,结合代码结构具体分析如下:


1. 观察者模式(Observer Pattern)​

核心应用场景:实时市场数据的分发机制
代码体现

// 行情到达时分发给订阅者
void WtHftEngine::on_tick(const char* stdCode, WTSTickData* curTick) {
    auto sit = _tick_sub_map.find(stdCode);
    if (sit != _tick_sub_map.end()) {
        for (auto& sub : sit->second) {
            HftContextPtr ctx = getContext(sub.first);
            ctx->on_tick(stdCode, curTick); // 通知观察者
        }
    }
}

模式要素

  • Subject(主题)​WtHftEngine维护_tick_sub_map等订阅关系表
  • Observer(观察者)​HftContext策略实例,实现on_tick等回调接口
  • 通知机制:通过遍历订阅列表触发策略回调

2. 策略模式(Strategy Pattern)​

核心应用场景:支持多种交易算法的灵活替换
代码体现

class HftStraBaseCtx : public IHftStraCtx {
public:
    virtual void on_tick(const char* stdCode, WTSTickData* newTick) = 0;
    // 其他策略接口...
};

// 引擎统一调用策略接口
void WtHftEngine::dispatch_to_strategy(uint32_t sid, EventType e) {
    HftContextPtr ctx = getContext(sid);
    if (ctx) ctx->on_event(e); // 多态调用
}

模式要素

  • Strategy InterfaceIHftStraCtx抽象接口
  • Concrete Strategy:具体策略类继承HftStraBaseCtx
  • ContextWtHftEngine通过_ctx_map管理策略实例

3. 工厂方法模式(Factory Method Pattern)​

核心应用场景:策略上下文的动态创建
代码体现

void WtHftEngine::addContext(HftContextPtr ctx) {
    _ctx_map[ctx->id()] = ctx; // 注册策略实例
}

// 外部通过工厂创建具体策略对象
HftContextPtr createStrategy(const char* name) {
    return new MyHftStrategy(name);
}

模式要素

  • ProductHftContextPtr抽象产品接口
  • Concrete ProductMyHftStrategy等具体策略
  • Factory:通过addContext间接实现对象注册

4. 组合模式(Composite Pattern)​

核心应用场景:批量管理策略生命周期
代码体现

std::map<uint32_t, HftContextPtr> _ctx_map;

void WtHftEngine::run() {
    for (auto& ctxPair : _ctx_map) {
        ctxPair.second->on_init(); // 统一初始化
    }
}

模式要素

  • ComponentHftContextPtr统一接口
  • Composite_ctx_map作为容器管理所有组件
  • 操作一致性:批量调用on_init/on_session_begin等方法

5. 单例模式(Singleton Pattern)​

核心应用场景:确保全局唯一引擎实例
代码体现

class WtHftEngine {
public:
    static WtHftEngine& getInstance() {
        static WtHftEngine instance;
        return instance;
    }
private:
    WtHftEngine(); // 私有构造函数
};

模式要素

  • 静态实例:通过getInstance()访问唯一实例
  • 私有构造:防止外部创建多个实例

6. 状态模式(State Pattern)​

核心应用场景:交易日状态管理
代码体现

void WtHftEngine::on_session_begin() {
    _ready = true; // 切换状态
    for(auto& ctx : _ctx_map) {
        ctx.second->on_session_begin(_cur_tdate);
    }
}

void WtHftEngine::on_session_end() {
    _ready = false;
    // 其他状态清理...
}

模式要素

  • State Interface:隐含的_ready状态标识
  • Concrete State:交易日开始(_ready=true)/结束(_ready=false)
  • 状态依赖行为:例如_ready控制是否处理交易指令

模式协作关系

graph TD
    Observer((Observer)) --> |订阅/通知| Subject[[WtHftEngine]]
    Strategy1(MyStrategyA) --> |实现| StrategyInterface[IHftStraCtx]
    Strategy2(MyStrategyB) --> |实现| StrategyInterface
    Subject --> |管理| Composite{{策略容器}}
    Composite --> Strategy1
    Composite --> Strategy2
    Subject --> |状态切换| State[交易日状态]
    Factory --> |创建| Strategy1
    Factory --> |创建| Strategy2

关键设计价值

  1. 解耦性:观察者模式分离数据生产(引擎)与消费(策略)
  2. 扩展性:策略模式支持快速接入新交易算法
  3. 统一管理:组合模式简化多策略批量操作
  4. 状态安全:单例模式确保全局访问点唯一
  5. 生命周期:工厂方法规范对象创建过程

这些模式共同构建了一个高内聚、低耦合的高频交易引擎架构,兼顾性能与可维护性。

http://www.dtcms.com/a/108310.html

相关文章:

  • 「青牛科技」GC5331 5V三相无感正弦波电机驱动芯片 对标茂达APX9331/灿瑞OCH2360
  • Spring Cloud Gateway 的核心作用
  • Flutter项目之登录注册功能实现
  • Debian/Ubuntu的networking的`/etc/network/interfaces`配置文件,如何配置route路由
  • SQL问题分析与诊断(8)——关键信息(2)
  • 数据结构----栈
  • LangChain/Eliza框架在使用场景上的异同,Eliza通过配置实现功能扩展的例子
  • 【力扣hot100题】(036)二叉树的最大深度
  • Spring Boot 工程创建详解
  • 小游戏中Enable Exceptions的各选项有何区别
  • 基于开源AI大模型与S2B2C模式的线下服务型门店增长策略研究——以AI智能名片与小程序源码技术为核心
  • 从静态到动态:D * 算法如何革新机器人路径规划
  • 图形渲染: tinyrenderer 实现笔记(Lesson 1 - 4)
  • ATEngin开发记录_1_在Vsiual Studio2022中使用ReShaper创建类模板
  • 理解激活函数,多个网络层之间如何连接
  • 红宝书第二十七讲:详解WebAssembly与asm.js如何实现高效执行
  • 七种分布式ID生成方式详细介绍--Redis、雪花算法、号段模式以及美团Leaf 等
  • 二分查找与二分答案入门c++
  • 如何对后端API进行负载测试
  • vue将组件中template转为js
  • codeforces C. Creating Keys for StORages Has Become My Main Skill
  • systemd服务开机启动(code=exited, status=203/EXEC)错误,由于SELinux 开启安全模式
  • AI知识补全(十五):AI可解释性与透明度是什么?
  • 详细说明一下C++中的static关键字
  • 火山引擎coze用户市场
  • 使用PyTorch实现GoogleNet(Inception)并训练Fashion-MNIST
  • 【华为OD技术面试真题 - 技术面】- Java面试题(17)
  • 移动端六大语言速记:第1部分 - 基础语法与控制结构
  • 网络安全协议知识点总结
  • 网络空间安全(49)Python基础语法