我定义了一个unique_id_generator类,这是一种单例即给定type_id只有一个实例。可以有许多不同的type_id,但是对于特定的type_id,只有一个实例。现在我要确保type_id = 0到一个特定的类。基本上就是特定的类可以使用type_id = 0,然后其他的可以自由使用。我想知道通过哪种设计模式可以确保实现这一点?我不想控制或支配一般给定的type_ids。仅供参考,我已经使用私有构造函数来阻止类的无保护实例化。
我无法控制谁先实例化一个unique_id_generator。同样基于设计,我不想通过获得type_id = 0的特定类路由唯一id的请求。
任何想法/建议都非常感谢。
我能想到的唯一解决方案是定义两个实例化方法。一个public和一个private,如下所示:
#define EXCLUSIVE_CNT 1
class UniqueID
{
public:
friend class MySpecialClass;
static UniqueID * GetInstance(int type_id)
{
assert(type_id >= EXCLUSIVE_CNT);
return Instantiate(type_id);
}
private:
int type_id_;
int seq_id_;
std::map<type_id, UniqueID*> type_to_obj_map_;
UniqueID(int type_id)
{
type_id_ = type_id;
seq_id_ = 0;
}
static UniqueID * GetExclusiveInstance(int type_id)
{
assert(type_id < EXCLUSIVE_CNT);
return Instantiate(type_id);
}
static UniqueID * Instantiate(int type_id)
{
if(type_to_obj_map_.find(type_id) == type_to_obj_map_.end())
{
type_to_obj_map_[type_id] = new UniqueID(type_id);
}
return type_to_obj_map_[type_id];
}
};