在WtHftEngine.cpp中,主要运用了以下几种设计模式,结合代码结构具体分析如下:
1. 观察者模式(Observer Pattern)
核心应用场景 :实时市场数据的分发机制
代码体现:
cpp
// 行情到达时分发给订阅者
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)
核心应用场景 :支持多种交易算法的灵活替换
代码体现:
cpp
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 Interface :
IHftStraCtx
抽象接口 - Concrete Strategy :具体策略类继承
HftStraBaseCtx
- Context :
WtHftEngine
通过_ctx_map
管理策略实例
3. 工厂方法模式(Factory Method Pattern)
核心应用场景 :策略上下文的动态创建
代码体现:
cpp
void WtHftEngine::addContext(HftContextPtr ctx) {
_ctx_map[ctx->id()] = ctx; // 注册策略实例
}
// 外部通过工厂创建具体策略对象
HftContextPtr createStrategy(const char* name) {
return new MyHftStrategy(name);
}
模式要素:
- Product :
HftContextPtr
抽象产品接口 - Concrete Product :
MyHftStrategy
等具体策略 - Factory :通过
addContext
间接实现对象注册
4. 组合模式(Composite Pattern)
核心应用场景 :批量管理策略生命周期
代码体现:
cpp
std::map<uint32_t, HftContextPtr> _ctx_map;
void WtHftEngine::run() {
for (auto& ctxPair : _ctx_map) {
ctxPair.second->on_init(); // 统一初始化
}
}
模式要素:
- Component :
HftContextPtr
统一接口 - Composite :
_ctx_map
作为容器管理所有组件 - 操作一致性 :批量调用
on_init
/on_session_begin
等方法
5. 单例模式(Singleton Pattern)
核心应用场景 :确保全局唯一引擎实例
代码体现:
cpp
class WtHftEngine {
public:
static WtHftEngine& getInstance() {
static WtHftEngine instance;
return instance;
}
private:
WtHftEngine(); // 私有构造函数
};
模式要素:
- 静态实例 :通过
getInstance()
访问唯一实例 - 私有构造:防止外部创建多个实例
6. 状态模式(State Pattern)
核心应用场景 :交易日状态管理
代码体现:
cpp
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
控制是否处理交易指令
模式协作关系
cpp
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
关键设计价值
- 解耦性:观察者模式分离数据生产(引擎)与消费(策略)
- 扩展性:策略模式支持快速接入新交易算法
- 统一管理:组合模式简化多策略批量操作
- 状态安全:单例模式确保全局访问点唯一
- 生命周期:工厂方法规范对象创建过程
这些模式共同构建了一个高内聚、低耦合的高频交易引擎架构,兼顾性能与可维护性。