當前位置: 妍妍網 > 碼農

Python實作工廠模式、抽象工廠,單例模式

2024-03-06碼農

哈嘍,大家好,我是了不起。

Python中實作工廠模式

工廠模式是一種常見的設計模式,它可以幫助我們建立物件的過程更加靈活和可延伸。在Python中,我們可以使用函式和類來實作工廠模式。

工廠函式

下面是一個使用函式實作工廠模式的範例:

classProduct:
def__init__(self, name):
self.name = name
defcreate_product(name):
return Product(name)
product = create_product("product_name")

在這個例子中,我們定義了一個 Product 類,它有一個 name 內容。我們還定義了一個 create_product 函式,它會建立一個 Product 物件並返回它。我們可以透過呼叫 create_product 函式來建立一個 Product 物件。

工廠類

下面是一個使用類實作工廠模式的範例:

classProduct:
def__init__(self, name):
self.name = name
classProductFactory:
defcreate_product(self, name):
return Product(name)
factory = ProductFactory()
product = factory.create_product("product_name")

在這個例子中,我們定義了一個 Product 類和一個 ProductFactory 類。 ProductFactory 類有一個 create_product 方法,它會建立一個 Product 物件並返回它。我們可以透過建立一個 ProductFactory 物件並呼叫它的 create_product 方法來建立一個 Product 物件。

抽象工廠模式

抽象工廠模式是一種建立一組相關或相互依賴物件的介面,而無需指定它們的具體類的設計模式。在Python中,我們可以使用抽象基礎類別來實作抽象工廠模式。

下面是一個使用抽象基礎類別實作抽象工廠模式的範例:

from abc import ABC, abstractmethod
classProduct(ABC):
@abstractmethod
defdo_something(self):
pass
classProductA(Product):
defdo_something(self):
print("ProductA is doing something.")
classProductB(Product):
defdo_something(self):
print("ProductB is doing something.")
classFactory(ABC):
@abstractmethod
defcreate_product(self):
pass
classFactoryA(Factory):
defcreate_product(self):
return ProductA()
classFactoryB(Factory):
defcreate_product(self):
return ProductB()
factory_a = FactoryA()
product_a = factory_a.create_product()
product_a.do_something()
factory_b = FactoryB()
product_b = factory_b.create_product()
product_b.do_something()






在這個例子中,我們定義了一個 Product 抽象基礎類別和兩個具體的 Product 類。每個具體的 Product 類都實作了 do_something 方法。我們還定義了一個 Factory 抽象基礎類別和兩個具體的 Factory 類。每個具體的 Factory 類都實作了 create_product 方法,它會建立一個具體的 Product 物件並返回它。我們可以透過建立一個具體的 Factory 物件並呼叫它的 create_product 方法來建立一個具體的 Product 物件。

單例模式

單例模式是一種保證一個類只有一個例項,並提供一個存取它的全域存取點的設計模式。在Python中,我們可以使用元類來實作單例模式。

下面是一個使用元類實作單例模式的範例:

classSingleton(type):
_instances = {}
def__call__(cls, *args, **kwargs):
if cls notin cls._instances:
cls._instances[cls] = super().__call__(*args, **kwargs)
return cls._instances[cls]
classMy class(meta class=Singleton):
pass
instance_1 = My class()
instance_2 = My class()
print(instance_1 is instance_2)


在這個例子中,我們定義了一個 Singleton 元類,它會保證一個類只有一個例項。我們還定義了一個 My class 類,它使用 Singleton 元類來實作單例模式。我們可以透過建立兩個 My class 物件並比較它們是否相同來驗證單例模式的實作。

Sora最近老火了,Sora 的出現會對短視訊、廣告、遊戲、影視行業等產業格局一定會被重塑,目前 Sora 還沒正式開放註冊,大家看到的使用體驗大部份都來自官網,或者少部份的使用者分享。

為了避免更多讀者受騙,我們直接給大家整了一個免費的。

註意是下面【 Python都知道 】公眾號,點選下方的公眾號卡片,然後回復【 sora ,即可獲取最新 Sora 的最全資料。


目前已經分享了,如何申請 Sora 的內測,以及最新關於 Sora 的技術特點,使用教程、變現機遇等等。