当前位置: 欣欣网 > 码农

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 的技术特点,使用教程、变现机遇等等。