今天小编给大家分享一下c++如何创建Singleton类的子类的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
创建Singleton类的子类
主要问题与其说是定义子类不如说是建立它的唯一实例,这样客户就可以使用它。事实上,指向单件实例的变量必须用子类的实例进行初始化。最简单的技术是在Singleton的Instance操作中决定你想使用的是哪一个单件。代码示例一节中的一个例子说明了如何用环境变量实现这一技术。
大致应该如下:
有两点需要说明:
代码中使用GetClassType来决定具体使用那个类的实例,也可以使用其他的方法,甚至宏定义。具体怎么做决定于实际的需求。
上述代码在基类的Cpp文件中引入了派生类的头文件。这是一个问题,但为了实现简单,恐怕也只能这样了。
另一个选择Singleton的子类的方法是将Instance的实现从父类(即MazeFactory)中分离出来并将它放入子类。这就允许C++程序员在链接时刻决定单件的类(即通过链入一个包含不同实现的对象文件),但对单件的客户则隐蔽这一点。
Singleton类在何处注册它们自己?一种可能是在它们的构造器中。例如,MySingleton子类可以像下面这样做:
当然,除非实例化类否则这个构造器不会被调用,这正反映了Singleton模式试图解决的问题!在C++中我们可以定义MySingleton的一个静态实例来避免这个问题。例如,我们可以在包含MySingleton实现的文件中定义:
static MySingleton theSingleton;
Singleton类不再负责创建单件。它的主要职责是使得供选择的单件对象在系统中可以被访问。静态对象方法还是有一个潜在的缺点 — 也就是所有可能的Singl eton子类的实例都必须被创建,否则它们不会被注册。
以上就是“c++如何创建Singleton类的子类”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网行业资讯频道。