1.今天修改代码时,发现单例的继承有个技巧,自己也写了一小段代码进行测试。
//Base.h
2.这代码的测试结果表明,在基类为单例,子类继承单例基类,且子类也要求是单例,我们可以把基类与子类的单例绑定起来,
也就是代码中的 static IFBase* (*s_fpInstance)(void);接口来实现。我们可以通过IFBase::Instance 及 TestIF::Instance来得到单例类。
//Base.h
#ifndef _BASE
#define _BASE
class Base
{
virtual void Test();
};
#endif
//IFBase.h
//TestIF.h #ifndef _TEST_IF
//IFBase.h
#ifndef _IFBASE
#define _IFBASE
#include "Base.h"
class IFBase: public Base
{
protected:
static IFBase* (*s_fpInstance)(void);
public:
IFBase();
virtual ~IFBase();
static IFBase* Instance();
virtual void Test();
};
#endif
//TestIF.h
#define _TEST_IF
#include "IFBase.h"
class TestIF: public IFBase
{
private:
static TestIF* pcInstance;
public:
TestIF();
virtual ~TestIF();
static TestIF* Instance(void);
static IFBase* InstanceBase(void);
static void Destroy(void);
virtual void Test();
};
#endif
//Base.cpp
//IFBase.cpp
#endif
//TestIF.cpp
//testmain.cpp
输出结果如下:
TestIF::Test
//Base.cpp
#include "stdafx.h"
#include "Base.h"
#include <iostream>
using namespace std;
void Base::Test()
{
cout<<"Base::Test"<<endl;
}
//IFBase.cpp
#ifndef _IFBASE
#define _IFBASE
#include "Base.h"
class IFBase: public Base
{
protected:
static IFBase* (*s_fpInstance)(void);
public:
IFBase();
virtual ~IFBase();
static IFBase* Instance();
virtual void Test();
};
//TestIF.cpp
#include "stdafx.h"
#include "TestIF.h"
#include <iostream>
using namespace std;
TestIF* TestIF::pcInstance = NULL;
IFBase* (*IFBase::s_fpInstance)(void) = TestIF::InstanceBase;
TestIF::TestIF()
{
}
TestIF::~TestIF()
{
}
TestIF* TestIF::Instance()
{
if(NULL == pcInstance)
{
pcInstance = new TestIF;
}
return pcInstance;
}
IFBase* TestIF::InstanceBase()
{
return Instance();
}
void TestIF::Destroy()
{
delete pcInstance;
pcInstance = NULL;
}
void TestIF::Test()
{
cout<<"TestIF::Test"<<endl;
}
//testmain.cpp
int main()
{
IFBase::Instance()->Test();
return 0;
}
输出结果如下:
TestIF::Test
2.这代码的测试结果表明,在基类为单例,子类继承单例基类,且子类也要求是单例,我们可以把基类与子类的单例绑定起来,
也就是代码中的 static IFBase* (*s_fpInstance)(void);接口来实现。我们可以通过IFBase::Instance 及 TestIF::Instance来得到单例类。