跨依赖类的状态一致性
State coherency across dependent classes
假设有两个类Foo
和Bar
,Bar
取决于Foo
提供的某些状态。这些类可能具有如下结构:
class Foo
{
public:
// Constructors and destructors
const State& get_state() const;
/* Invalidates and recreates the 'State' object passed by 'get_state' */
void handle_event();
private:
// private member variables
};
class Bar
{
public:
Bar(const Foo& foo);
private:
const State& m_state; //Assigned via foo.get_state()
};
假设除了将Foo
和Bar
组合到一个类之外,还必须通过这种方式State
。此外,假设可以有多个Bar
类使用 Foo
中的State
。
当调用handle_event
成员函数时,处理情况的模式或"标准"方式是什么,以便Bar
始终处于有效状态?
我可以想象,像Bar
在其构建过程中向Foo
注册之类的东西可以提供这样的机制。下面是一个示例。这样做的问题是我觉得它可能耦合得太紧密了。
class Foo
{
public:
void register_dependency(Bar* bar);
void deregister_dependency(Bar* bar);
private:
std::set<Bar *> m_dependencies;
};
class Bar
{
public:
void invalidate_state(const Foo& foo);
};
我会选择像你提出的系统。 它是既定观察者模式的一个版本。
如果您认为除Bar
之外的其他类型可能需要状态与Foo
,那么您可以使用接口来解耦。
class Foo;
class IFooStateObserver {
public:
virtual ~IFooStateObserver() {}
virtual void invalidate_state(const Foo& foo) = 0;
};
class Foo {
public:
void register_dependency(IFooStateObserver* observer);
void deregister_dependency(IFooStateObserver* observer);
private:
std::set<IFooStateObserver*> m_dependencies;
};
class Bar : public IFooStateObserver {
public:
void invalidate_state(const Foo& foo) override;
};
如有必要,类似的系统可以将Foo
与Bar
隔离开来。
相关文章:
- Constexpr替代了新的放置方式,可以让内存中的对象保持未初始化状态
- 我不断收到 [错误] ID 返回 1 退出状态错误,但看不到问题所在
- OSX MetalKit CVMetalTextureCacheCreateTextureFromImage失败,状态:
- 缓存std::数组的选定元素,并在c++中自动保持其一致性
- std::future_error:无关联状态
- 如何避免LED在循环状态变化中闪烁?
- boost 是否有按特殊类型值编码状态"compact optional"?
- 为什么系统函数总是在C++中返回已转移的退出状态?
- C++ 中的编译错误:未定义对"主"的引用 collect2:错误:ld 返回 1 个退出状态
- 当可输入框在窗口中处于活动状态时获得通知的任何方法
- 检查两个节点在子节点上是否具有相同状态的更优雅的方法
- 标准::make_pair 和标准::make_optional之间的一致性
- 将有状态的 lambda 传递到 C 样式函数中,而无需上下文参数
- 在 nullptr 上调用无状态类的非静态成员函数是否合法?
- 编译问题:在函数"_start"中:未定义对"主"的引用 collect2:错误:ld 返回 1 个退出状态
- C++部分概念 id:显式模板规范顺序/第一个参数的特殊状态的原因是什么?
- 试图在崇高中奔跑. 错误 已发生: 收集2.exe: 错误: ld 返回 1 退出状态
- 在容器上移动分配:以前包含的对象的状态
- 可以从std::string继承以提供类型一致性吗
- 跨依赖类的状态一致性