我必须为某些类型的对象创建简单的单例对象工厂。问题是我无法找到智能方法来阻止用户通过构造函数创建对象实例。我知道我可以将构造函数移动到私有/受保护的部分,但是当构造函数是私有/受保护时,工厂现在将如何创建新对象?让工厂成为每个班级的朋友并不是非常聪明,因为我需要在每个标题中预先设定工厂并写出附属的朋友工厂;"在每个班级。如何做到这一点?
答案 0 :(得分:2)
在类中,添加一个静态成员作为指向同一类型的类的指针。这将是你的单身人士。
初始化实例时,运行构造函数。
如果这是第一次,静态成员为null(从不初始化),则正常运行构造函数并设置默认值。最后还将静态成员设置为this
。现在你的单身人士已初始化。
在后续构造函数调用中,静态指针不为null。创建一个指向类类型的临时指针。将此指针设置为this
,然后将this
设置为静态成员并删除指针。这将删除新实例,并且每次都返回相同的静态实例。