七 物件導向之單例設計模式

2022-03-10 13:52:47 字數 2286 閱讀 4109

一、"""單例設計模式:通俗的講就是單個例項物件

設計模式:前人在工作中,為了做需求寫**積累的一種**設計思想,我們根據套路來就行了

>>>>>>>

之前講過的建立類例項物件,工作原理是這樣的---呼叫類建立物件,直譯器會自動呼叫__new__這個內建的靜態方法為物件分配記憶體空間

,然後返回這個物件,再將這個物件的引用傳給__init__初始化方法進行初始化。這是工作原理,但是在建立多個物件時,給物件分配

記憶體空間的記憶體位址是不一樣的,也就是多個例項,接下來單例就是要將建立多個物件時,分配的記憶體空間的記憶體位址始終是唯一乙個,這就叫單例

"""這幅圖是描述呼叫類建立物件時的工作原理:

實現單例的**:

class

person(object):

instance_neicun = none #

用類屬性記錄建立物件時的記憶體位址

def__new__(cls, *args, **kwargs): #

重寫new方法

if cls.instance_neicun is

none:

cls.instance_neicun = super().__new__(cls) #

用乙個變數接收object類中new方法返回的記憶體位址,new是乙個特殊的靜態

#方法,呼叫時需要傳遞cls引數

return cls.instance_neicun #

new方法需要返回乙個物件,

def__init__

(self):

print('

初始化開始...')

a =person()

print

(a)b =person()

print(b)

輸出結果:

初始化開始...

《單例設計模式.person object at 0x0000000001730748>

初始化開始...

《單例設計模式.person object at 0x0000000001730748>

此時你會發現,我建立倆個物件時,記憶體位址都是一樣的!

二、上面的**你會發現,初始化內容每呼叫一次就會輸出一次,那麼如果只要輸出一次怎麼做呢?只需要將上述**做一點修改就可以了

class

person(object):

instance_neicun = none #

用類屬性記錄建立物件時的記憶體位址

instance_flag = false #

是否執行過初始化方法的標記

def__new__(cls, *args, **kwargs): #

重寫new方法

if cls.instance_neicun is

none:

cls.instance_neicun = super().__new__(cls) #

用乙個變數接收object類中new方法返回的記憶體位址,new是乙個特殊的靜態

#方法,呼叫時需要傳遞cls引數

return cls.instance_neicun #

new方法需要返回乙個物件,

def__init__

(self):

#判斷如果初始化方法被呼叫過一次,就直接返回

if person.instance_flag is

true:

return

#如果沒有呼叫過,就進行初始化

print('

初始化開始...')

#修改標記

person.instance_flag =true

a =person()

print

(a)b =person()

print(b)

輸出結果:

初始化開始...

《單例設計模式.person object at 0x000000000170f668>

《單例設計模式.person object at 0x000000000170f668>

此時你會發現,建立倆個物件,只輸出了乙個初始化內容

物件導向之單例設計模式

設計模式 解決某一種問題的思想。是一種行之有效的解決方式。23種模式。單例設計模式。思想!思想!思想!解決問題 能夠保證乙個類的物件在記憶體中的唯一性。應用場景 多個成序都在操作同乙個配置檔案時,程式b需要知道程式a的結果並基於此結果進行後續操作 前提是,資料都儲存在配置檔案的物件中,要求程式a和程...

物件導向 單例設計模式

單例設計模式 就是保證該類在程式中只能存在乙個物件,所以不能讓別人例項化該類,所以要私有化 private 該類的建構函式,但是你要為別人提供乙個該類的唯一物件,所以你要在該類中定義乙個靜態的方法返回本類物件。設計模式 解決某一問題最行之有效的方法 單例設計模式 解決乙個類在記憶體只存在乙個物件 想...

物件導向 單例設計模式

單例設計模式 就是保證該類在程式中只能存在乙個物件,所以不能讓別人例項化該類,所以要私有化 private 該類的建構函式,但是你要為別人提供乙個該類的唯一物件,所以你要在該類中定義乙個靜態的方法返回本類物件。設計模式 解決某一問題最行之有效的方法 單例設計模式 解決乙個類在記憶體只存在乙個物件 想...