我正在用C ++编写一个共享库,它将通过JNI
调用。我有一个类从Java接收消息并转发到适当的对象。我们称之为Dispatcher
。有一个DataStore
必须存在于该计划的生命周期。实际上一些数据必须可以在JNI
调用之间访问。
我目前的草图由两个类组成单例。 DataStore
看起来像这样:
class DataStore {
// constructors, get_instance() etc. are skipped
int _read_only_variable{};
public:
DataStore (int param) : _read_only_variable(param) {}
// or
void set_data(int param) {
_read_only_variable = param
}
};
我如何保证只有一个Dispatcher
对象可以创建一个DataStore
对象或只有Dispatcher
可以调用set_data
?
从另一方面来说,如果我保证_read_only_variable
实际上只是在构造函数中编写,那么将确保只存在一个实例。
我也想要适合SOLID
原则,因此我会避免嵌套类。
你可以保证只有Dispatcher
通过将它们设为私有来调用这些方法,然后使Dispatcher
成为friend
。
附:一个_read_only_variable
将是C ++中的const
。编译器会大声抱怨你试图修改它。但它只保证每个数据存储区有一个_read_only_variable
,这非常简单而不是你想要的。