操作大型数据类的多个 "worker classes"的 C++ 模式

标签 c++ oop design-patterns

我有一个非常大的数据类(老实说,实际上是一个结构),它需要以足够多的不同方式进行操作,以至于我不想只将所有操作器实现为数据类的成员方法。

现在,我将操纵器设置为单例,或由某个管理器对象持有的小型实例化类,并在初始化期间向每个操纵器传递一个指向数据类的指针。这行得通,但我觉得有点草率。

一个复杂的问题是操纵器有状态。可以从操纵器本身中分解出来的操纵器状态的一个例子是线程安全助手(互斥体/信号量),但是还有其他数据成员在逻辑上属于操纵器,所以我认为这个问题不会消失。

所以我想知道,是否有一些设计模式可以为这种情况提供更简洁的解决方案?

最佳答案

A factory pattern可以与工厂一起使用,提供一种方法,该方法采用对数据的指针或引用,以及一个指示要执行的操作的值(可能是枚举),然后选择可以执行该操作的代理并要求它这样做。

至于状态,如果代理的状态是同步的,那么工厂中的单个状态就可以了——如果它们不是同步的,那么工厂可以简单地提供一个方法,在发生任何可能改变的事情时调用任何代理的状态并通知所有代理。或者,代理本身可以是 observers无论是什么导致状态变化。

至于实现状态机——这也经常使用工厂模式来完成!所以你可以有一个工厂的工厂,其中每个子工厂也是一个观察者。这简直太棒了。

关于操作大型数据类的多个 "worker classes"的 C++ 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20124480/

相关文章:

asp.net-mvc - 页面 Controller 模式到底是什么?

c++ - std::vector 迭代器不兼容

c++ - zip 文件可以是稀疏的/不连续的吗?

c++ - 使用 basic_ofstream 写入字节数据序列

java - 工厂模式和 builder 模式的结合?

oop - ABAP 对象中的 `ADD-CORRESPONDING` 相当于什么?

c++ - 运算符重载的基本规则和惯用法是什么?

r - 定义调用 R6 对象之外的其他方法的方法

Java——模式——Matcher.group()?

c++ - 单例 - protected 与私有(private)构造函数