Python程式設計 設計模式之單例和簡單工廠

2021-08-15 23:01:08 字數 2495 閱讀 4375

一種解決問題的思想和方法

高內聚、低耦合

建立類設計模式

單例模式、簡單工廠模式、工廠模式、抽象工廠模式、原型模式、建造者模式;

結構類設計模式

裝飾器模式、介面卡模式、門面模式、組合模式、享元模式、橋梁模式;

行為類設計模式

策略模式、責任鏈模式、命令模式、中介者模式、模板模式、迭代器模式、訪問者模式、觀察者模式、直譯器模式、備忘錄模式、狀態模式。

# 1、python與設計模式--單例模式

# import threading

import time

# 抽象單例

class

singleton

(object):

def__new__

(cls, *args, **kwargs):

ifnot hasattr(cls, "_instance"):

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

return cls._instance

# 匯流排

class

bus(singleton):

lock = threading.rlock()

defsenddata

(self, data):

bus.lock.acquire()

time.sleep(3)

print("senddata:", data)

bus.lock.release()

# 執行緒物件

class

visitentity

(threading.thread):

my_bus = ""

name = ""

defgetname

(self):

return name

defsetname

(self, name):

self.name = name

defrun(self):

self.my_bus = bus()

self.my_bus.senddata(self.name)

if __name__ == '__main__':

for i in range(3):

print("run %s"%(i))

my_entity = visitentity()

my_entity.setname("entity_" + str(i))

my_entity.start()

"""run 0

run 1

run 2

senddata: entity_0

senddata: entity_1

senddata: entity_2

"""# 關於super

# 設計模式之簡單工廠模式

# """簡單工廠模式:

專門定義乙個 工廠類 來負責建立 產品類 的例項,被建立的產品通常都具有共同的父類。

三個角色:

簡單工廠(******productfactory)角色

抽象產品(product)角色

具體產品(concrete product)角色

"""# 抽象產品

class

fruit

(object):

defproduce

(self):

print("fruit is prodeced")

# 具體產品

class

(fruit):

defproduce

(self):

class

banana

(fruit):

defproduce

(self):

print("banana is produced")

# 簡單工廠

class

factory

(object):

defproducefruit

(self, fruit_name):

elif fruit_name == "banana":

return banana()

else:

return fruit()

if __name__ == '__main__':

factory = factory()

banana = factory.producefruit("banana")

banana.produce()

fruit = factory.producefruit("fruit")

fruit.produce()

"""banana is produced

fruit is prodeced

"""

Python之單例設計模式

單例是一種設計模式,應用該模式的類只會生成乙個例項。單例模式保證了在程式的不同位置都可以且僅可以取到同乙個物件例項 如果例項不存在,會建立乙個例項 如果已存在就會返回這個例項。因為單例是乙個類,所以你也可以為其提供相應的操作方法,以便於對這個例項進行管理。以下是實現方法索引 使用 new 方法在創造...

Python設計模式之單例模式

站 物件 印表機 物件 使用類名 建立物件時,python 的直譯器首先 會 呼叫 new 方法為物件 分配空間。new 是乙個 由object基類提供的內建的靜態方法,主要作用有兩個 python 的直譯器獲得物件的 引用 後,將引用作為 第乙個引數,傳遞給 init 方法。重寫 new 方法 的...

python設計模式之單例模式

單例模式是一種建立型設計模式,它確保乙個類有且只有乙個特定型別的物件,並提供全域性訪問點。其意圖為 簡單理解 單例即為單個例項,也就是每次例項化建立物件時獲得的都是同乙個物件,當然同乙個物件的屬性都是相同的,方法也是相同的,位址也是相同的,這樣給我們帶來的好處就是可以避免消耗過多的記憶體或cpu資源...