成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

python之單例模式實(shí)現(xiàn)的三種方式

dack / 732人閱讀

摘要:輸出結(jié)果輸出結(jié)果此外還有兩種實(shí)現(xiàn)單例的方式,我呢也給大家列出來,方便大家學(xué)習(xí)和參考方式一方式二單例模式實(shí)現(xiàn)方式二。。。

什么是單例模式?通俗點(diǎn)講:?jiǎn)卫J骄褪窃诔绦驁?zhí)行的過程中,類只有一個(gè)實(shí)例,這不是說單例模式只能去創(chuàng)建一個(gè)實(shí)例,而是你創(chuàng)建的所有實(shí)例(也就是對(duì)象)都指的是同一個(gè)實(shí)例。如何做到這一點(diǎn)呢?我們的__new__特殊方法就派上用場(chǎng)了,可能大家對(duì)這個(gè)方法熟悉又陌生,那么接下來通過一個(gè)小程序簡(jiǎn)單的過渡一下

class A():
    def __new__(cls):
        return "你好"
    
    def __init__(self):
        print(self)

print(A())

猜想一下,這里控制臺(tái)會(huì)輸出什么?

輸出結(jié)果:你好

這里再創(chuàng)建A對(duì)象的時(shí)候就會(huì)先執(zhí)行__new__方法,然后將返回值傳遞給__init__方法的self,所以結(jié)果會(huì)是:你好,這這段程序中我們知道對(duì)象的創(chuàng)建是依靠__new__方法的,那么我們就可以通過這個(gè)方法入手,每次創(chuàng)建對(duì)象的時(shí)候在__new__方法內(nèi)部進(jìn)行判斷,不拐彎抹角了,直接附上為小伙伴們準(zhǔn)備的代碼。

class A():
    _instance = None

    def __new__(cls):
        if cls._instance is None:
            cls._instance = super().__new__(cls)
        return cls._instance

    def __init__(self):
        print(self)
        
A()    #輸出結(jié)果:<__main__.A object at 0x0000020CED433FD0>
A()    #輸出結(jié)果:<__main__.A object at 0x0000020CED433FD0>

此外還有兩種實(shí)現(xiàn)單例的方式,我呢也給大家列出來,方便大家學(xué)習(xí)和參考:

# 方式一
def Single(cls,*args,**kwargs):
    instances = {}
    def get_instance (*args, **kwargs):
        if cls not in instances:
            instances[cls] = cls(*args, **kwargs)
        return instances[cls]
    return get_instance
@Single
class B:
    pass
    
# 方式二
class Single:
    def __init__(self):
        print("單例模式實(shí)現(xiàn)方式二。。。")

single = Single()
del Single  # 每次調(diào)用single就可以了

通過測(cè)驗(yàn),可以清晰對(duì)比到兩個(gè)對(duì)象地址是一樣的,可見我們的目的就達(dá)到了,上面三種實(shí)現(xiàn)方式
在使用中也略有不同,大家可以根據(jù)需要使用。
謝謝大家的支持!

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/42923.html

相關(guān)文章

  • 每天一個(gè)設(shè)計(jì)模式單例模式

    摘要:博主按每天一個(gè)設(shè)計(jì)模式旨在初步領(lǐng)會(huì)設(shè)計(jì)模式的精髓,目前采用靠這吃飯和純粹喜歡兩種語(yǔ)言實(shí)現(xiàn)。單例模式用途如果一個(gè)類負(fù)責(zé)連接數(shù)據(jù)庫(kù)的線程池日志記錄邏輯等等,此時(shí)需要單例模式來保證對(duì)象不被重復(fù)創(chuàng)建,以達(dá)到降低開銷的目的。 博主按:《每天一個(gè)設(shè)計(jì)模式》旨在初步領(lǐng)會(huì)設(shè)計(jì)模式的精髓,目前采用javascript(_靠這吃飯_)和python(_純粹喜歡_)兩種語(yǔ)言實(shí)現(xiàn)。誠(chéng)然,每種設(shè)計(jì)模式都有多種實(shí)...

    yy736044583 評(píng)論0 收藏0
  • 每天一個(gè)設(shè)計(jì)模式單例模式

    摘要:博主按每天一個(gè)設(shè)計(jì)模式旨在初步領(lǐng)會(huì)設(shè)計(jì)模式的精髓,目前采用靠這吃飯和純粹喜歡兩種語(yǔ)言實(shí)現(xiàn)。單例模式用途如果一個(gè)類負(fù)責(zé)連接數(shù)據(jù)庫(kù)的線程池日志記錄邏輯等等,此時(shí)需要單例模式來保證對(duì)象不被重復(fù)創(chuàng)建,以達(dá)到降低開銷的目的。 博主按:《每天一個(gè)設(shè)計(jì)模式》旨在初步領(lǐng)會(huì)設(shè)計(jì)模式的精髓,目前采用javascript(_靠這吃飯_)和python(_純粹喜歡_)兩種語(yǔ)言實(shí)現(xiàn)。誠(chéng)然,每種設(shè)計(jì)模式都有多種實(shí)...

    lijy91 評(píng)論0 收藏0
  • Java基礎(chǔ)學(xué)習(xí)——多線程單例設(shè)計(jì)模式(轉(zhuǎn))

    摘要:總之,選擇單例模式就是為了避免不一致狀態(tài),避免政出多頭。二餓漢式單例餓漢式單例類在類初始化時(shí),已經(jīng)自行實(shí)例化靜態(tài)工廠方法餓漢式在類創(chuàng)建的同時(shí)就已經(jīng)創(chuàng)建好一個(gè)靜態(tài)的對(duì)象供系統(tǒng)使用,以后不再改變,所以天生是線程安全的。 概念:  Java中單例模式是一種常見的設(shè)計(jì)模式,單例模式的寫法有好幾種,這里主要介紹兩種:懶漢式單例、餓漢式單例。  單例模式有以下特點(diǎn):  1、單例類只能有一個(gè)實(shí)例。 ...

    dendoink 評(píng)論0 收藏0
  • Python版設(shè)計(jì)模式單例模式

    摘要:?jiǎn)卫J皆谀承﹫?chǎng)景下,我們希望實(shí)體類無論實(shí)例化多少次都只會(huì)產(chǎn)生一個(gè)實(shí)體對(duì)象,這時(shí)候就需要使用單例模式。經(jīng)常使用的場(chǎng)景就是全局配置類。 單例模式 在某些場(chǎng)景下,我們希望實(shí)體類無論實(shí)例化多少次都只會(huì)產(chǎn)生一個(gè)實(shí)體對(duì)象,這時(shí)候就需要使用單例模式。經(jīng)常使用的場(chǎng)景就是全局配置類。 模式框架 方式1:使用修飾器 使用函數(shù)定義裝飾器 def singletons(cls): 定義一個(gè)...

    xiao7cn 評(píng)論0 收藏0
  • python單例模式和工廠模式

    摘要:在工廠方法模式中,我們會(huì)遇到一個(gè)問題,當(dāng)產(chǎn)品非常多時(shí),繼續(xù)使用工廠方法模式會(huì)產(chǎn)生非常多的工廠類。從簡(jiǎn)單工廠模式到抽象工廠模式,我們都是在用后一種模式解決前一種模式的缺陷,都是在最大程度降低代碼的耦合性。 單例模式 所謂單例模式,也就是說不管什么時(shí)候我們要確保只有一個(gè)對(duì)象實(shí)例存在。很多情況下,整個(gè)系統(tǒng)中只需要存在一個(gè)對(duì)象,所有的信息都從這個(gè)對(duì)象獲取,比如系統(tǒng)的配置對(duì)象,或者是線程池。這些...

    jayce 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<