最近工作中遇到這樣一個問題:
之前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 請按任意鍵繼續. . .
才工作,能力有限,如有錯誤的地方,還請指出,不勝感激。