單例概念以及應用場景

單例概念:

????單例是一個特殊的類,這個類只能創(chuàng)建一次實例,例子如下:

? ? ? ? ? ? 1.a = Std(name='leo'), b = Std(name='jack'),兩者的指向都是name=‘leo’的對象;

? ? ? ? ? ? 2.windows中只有一個回收站,打開一次回收站只會出現(xiàn)一次窗口,雙擊第二次不會出現(xiàn)第二個窗口 ,這就是單例,對象不會重新創(chuàng)建,只會創(chuàng)建一次;

單例的作用:

? ? ? ? 1.用于有單例需求的業(yè)務場景,例如windows的回收站;

? ? ? ? 2.之前我做的項目用到了第三方sdk做接口發(fā)送短信驗證碼,但是該sdk寫的代碼不夠好,重復創(chuàng)建對象去發(fā)送短信,如果有幾十萬個用戶同時有發(fā)送短信的需求,那么該sdk就要重復創(chuàng)建幾十萬個用于發(fā)送短信驗證碼的對象,實際上它只是要調用對象的方法進行發(fā)送短信罷了,因此可以用單例設計模式減輕服務器負擔,代碼對比如下:

第三方sdk源碼:

[python]?view plain?copy

#初始化REST?SDK??

rest?=?REST(serverIP,serverPort,softVersion)??

rest.setAccount(accountSid,accountToken)??

rest.setAppId(appId)??

result?=?rest.sendTemplateSMS(to,datas,tempId)??

我寫的單例代碼:

[python]?view plain?copy

class?CCP(object):??

"""封裝單例類,用于統(tǒng)一的發(fā)送短信驗證碼"""??

_singleton?=None??

def?__new__(cls,?*args,?**kwargs):??

if?not?cls._singleton:??

cls._instance?=?super(CCP,?cls).__new__(cls,?*args,?**kwargs)??

cls._instance.rest?=?REST(serverIP,serverPort,softVersion)??

cls._instance.rest.setAccount(accountSid,accountToken)??

cls._instance.rest.setAppId(appId)??

return?cls._instance??

def?send_sms_msg(self,?to,?datas,?tempId):??

"""發(fā)送短信驗證碼的實例方法"""??

ret?=self.rest.sendTemplateSMS(to,?datas,?tempId)??

if?ret.get('statusCode')?==?'000000':??

return?1??

else:??

return?0??

總結:單例設計模式用于有減少重復創(chuàng)建實例需求的場景,例如windows的回收站頁面,短信發(fā)送對象等業(yè)務場景;

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容