Mat*_*ips 5 c++ dependencies include strategy-pattern
我正在考虑策略模式(Design Patterns,GoF94),其中建议传递给策略构造函数的上下文可以是包含策略(作为成员)本身的对象.但以下方法不起作用:
//analysis.h
class StrategyBase;
class Strategy1;
class Strategy2;
class Analysis
{
...
void ChooseStrategy();
private:
StrategyBase* _s;
...
};
//analysis.cpp
void Analysis::ChooseStrategy()
{
if (...) _s = new Strategy1(this);
else if (...) _s = new Strategy2(this);
...
}
//strategy.h
#include analysis.h
...
Run Code Online (Sandbox Code Playgroud)
然后StrategyBase及其子类访问Analysis的数据成员.
这不起作用,因为您无法在定义之前实例化Strategy*类.但它的定义取决于分析的定义.那么你应该怎么做呢?将ChooseStrategy替换为
void SetStrategy(StrategyBase* s) { _s = s; }
Run Code Online (Sandbox Code Playgroud)
并在#include analysis.h和strategy.h的文件中进行实例化?这里最好的做法是什么?
除了非常一般的状态/策略之外,您将始终在状态/策略模式中具有循环依赖关系.但是你可以限制相应的其他类的in-size(Lakos)使用,以便它至少编译:
Analysis(analysis.h或strategies.h)StrategyBase和子类(不要使用的内联方法Analysis)(strategies.h)Analysis(可能已经使用了使用策略的内联方法)(analysis.h)Analysis和策略类的非内联方法(analysis.cpp)| 归档时间: |
|
| 查看次数: |
812 次 |
| 最近记录: |