? ? ? ? 最近工作中遇到這樣一個問題:
????????之前N年,公司用的都是一塊CPU對應一塊物理板,也就是,一塊物理板只要一個實例化就可以了----俗稱單例模式。
????????現在突然要一塊CPU對應多塊物理板,妥妥的多例模式啊。但是之前的架構有事按照單例模式來的!
????????其中有一點很讓人頭疼,兼容性問題。保證之前的代碼的可用性(因為同事多個產品用到了這份代碼);即:Instance的靜態調用。
? ? ? ? 這個static你說他好用,她也好用,不好用,也是真的不好用。因為static的緣故,我即使多實例化,但是最后instance還是只有一份,只想最后一個,而且代碼中其他處,對這個instance進行的非空 判斷。著實讓人腦殼疼。
? ? ? ? 于是就在網上找啊,找啊。發現這方面的確什么人在講。其實講多例模式的都少的可伶,又想到我大學里,老師壓根兒連堆中實例化,也沒見過,更別說這個了。所以只能自己動手寫一個了。
? ? ? ?還好最終給我東拼西湊的,倒是把功能實現了,下面直接看代碼吧:? ?
.h 文件
? #pragma once
#include <stdio.h>
class MyTestFunc
{
public:
int m_chssposs;
static MyTestFunc *chssposs[12];
MyTestFunc(int i)
{
m_chssposs=i;
chssposs[i]=this;
}
~MyTestFunc(void)
{
printf("chssposs[%d]=%u\n",m_chssposs,chssposs[m_chssposs]);
};
static MyTestFunc* Instance(int i=0)
{
return chssposs[i];
};
};
. cpp文件
#include "MyTestFunc.h"
MyTestFunc* MyTestFunc::chssposs[12]={0};
int main()
{
for (int i=0;i<3;i++)
{
MyTestFunc *p=new MyTestFunc(i);
}
for (int i=0;i<5;i++)
{
printf("MyTestFunc::Instance(1)=%u\n",MyTestFunc::Instance(i));
}
}
運行結果:
MyTestFunc::Instance(1)=7162976
MyTestFunc::Instance(1)=7163024
MyTestFunc::Instance(1)=7163072
MyTestFunc::Instance(1)=0
MyTestFunc::Instance(1)=0
請按任意鍵繼續. . .
才工作,能力有限,如有錯誤的地方,還請指出,不勝感激。