单例模式
单例模式:顾名思义,只有一个对象实例,即保证一个类只有一个对象可以使用。作用类似于一个全局变量,可以任意调用,但是比全局变量更容易管理,使用。
单例模式也有很多种实现方式:
第一种实现方法
.h文件
class CSock_Test : public CAsyncSocket
{
public:
virtual ~CSock_Test();
virtual void OnReceive(int nErrorCode);
virtual void OnClose(int nErrorCode);
static CSock_Test * GetSockInstance();//获得该类实例的方法
static void RealeaseSock();//释放实例的方法
private:
static CSock_Test *m_pSockInstance;//实例的指针
CSock_Test();
};
.cpp文件// CSock_Test
CSock_Test * CSock_Test::m_pSockInstance = NULL;
CSock_Test::CSock_Test()
{
}
CSock_Test::~CSock_Test()
{
}
CSock_Test * CSock_Test::GetSockInstance()
{
if (m_pSockInstance == NULL)
{
m_pSockInstance = new CSock_Test();//第一次创建对象
}
return m_pSockInstance;
}
void CSock_Test::RealeaseSock()
{
if (m_pSockInstance)
{
delete m_pSockInstance;
m_pSockInstance = NULL;
}
}
客户端通过调用GetSockInstance()方法获得该类的实例指针m_pSockInstance。由于该类的构造函数是私有的,因此无论什么时候在该类外部创建类的对象都会失败,例如,CSock_Test *test = new CSock_Test(),这个就会报错,因为无法调用构造函数。第一次调用GetSockInstance()方法时,会创建一个新的对象,之后每次调用则会返回第一次调用时创建的对象指针。用法:
CSock_Test *m_single = CSock_Test::GetSockInstance();
m_single->Send(...);//调用该类中的方法
第二种方法:
待续: