python3 6 單例模式及工廠模式

2022-06-15 10:06:13 字數 2359 閱讀 9256

單例模式的幾種實現方式:

1.使用模組

2.使用__new__

3.使用裝飾器

4.使用元類

使用模組:python的模組就是天然的單例模式,因為模組在第一次匯入的時候,會生成.pyc的檔案,在第二次匯入的時候就會直接載入.pyc檔案,而不會再次執行模組**

使用__new__:

#

例項化乙個單例

class

singleton(object):

__instance =none

def__new__

(cls, age, name):

#如果類屬性__instance的值為none,

#那麼就建立乙個物件,並且賦值為這個物件的引用,保證下次呼叫這個方法時

#能夠知道之前已經建立過物件了,這樣就保證了只有1個物件

ifnot cls.__instance

: cls.

__instance = object.__new__

(cls)

return cls.__instance

a = singleton(18, "

dongge")

b = singleton(8, "

dongge")

print

(id(a))

print(id(b))

使用裝飾器:

from functools import

wraps

defsingleton(cls):

instances ={}

@wraps(cls)

def getinstance(*args, **kwargs):

if cls not

ininstances:

instances[cls] = cls(*args, **kwargs)

return

instances

return

getinstance

@singleton

class

bar:

pass

b0 =bar()

b1 =bar()

print

(id(b0))

print

(id(b1))

使用元類:

元類(metaclass)可以控制類的建立過程

class

singleton(type):

"""元類繼承type

"""_instance ={}

def__call__(cls, *args, **kwargs):

if cls not

incls._instance:

cls._instance[cls] = super().__call__(*args, **kwargs)

return

cls._instance

class bar(metaclass=singleton):

pass

b0 =bar()

b1 =bar()

print

(id(b0))

print(id(b1))

工廠模式:

class

fruit(object):

def__init__

(self):

pass

defprint_color(self):

pass

class

def__init__

(self):

pass

defprint_color(self):

print("")

class

orange(fruit):

def__init__

(self):

pass

defprint_color(self):

print("

orange is in orange")

class

fruitfactory(object):

fruits =

def__new__

(cls, name):

if name in

cls.fruits.keys():

return

cls.fruits[name]()

else

:

return

fruit()

fruit1 = fruitfactory("")

fruit2 = fruitfactory("

orange

")

單例模式 工廠模式

單例模式 一 什麼是單例模式 有時候我們會遇到這樣一種情況,乙個類只能有乙個物件被例項化,這時我們就可以使用單例模式了。單例模式通過類本身來管理其唯一例項。在設計這個類的時候,讓他只能建立乙個例項並提供對此例項的全域性訪問。因此單例模式有兩個最基本的條件是,確保乙個類只有乙個例項被建立,提供乙個對例...

工廠模式 單例模式

一.單例模式介紹 單例類只能有乙個例項。單例類必須自己建立自己的唯一例項。單例類必須給所有其他物件提供這一例項。二.單例模式分為 4 雙重檢驗 這是最優的執行緒安全 即使用於單執行緒又適用於多執行緒 第乙個進來的時候,判斷為空,然後加鎖,繼續判斷為空,如果開闢了空間之後,還沒有去賦值,這時候有其他執...

單例模式 工廠模式

單例 package com.enorth.user public class singleton public static singleton getinstance return singleton 簡單工廠 產品介面 public inte ce product 具體產品a public c...