python工厂模式
工厂模式简介
工厂模式是一种创建对象的设计模式,它将对象的创建和使用分离。其核心思想是通过一个工厂类来负责创建对象,而不是在客户端代码中直接实例化对象。这样做的好处有:
- 降低耦合度:客户端代码不需要知道具体的对象创建细节,只需要向工厂请求所需的对象,减少了代码之间的依赖。
- 提高可维护性和可扩展性:当需要添加新的产品类型时,只需在工厂类中添加相应的创建逻辑,而不需要修改客户端代码。
下面以一段代码讲解一下实现细节:
实现一个产品基类:
import abc
from enum import Enum# 定义一个抽象基类产品
class Product(metaclass=abc.ABCMeta):@abc.abstractmethoddef operation(self):pass
- 导入模块:
abc
模块用于创建抽象基类,enum
模块用于创建枚举类型。 - 抽象基类
Product
:使用abc.ABCMeta
作为元类定义了一个抽象基类Product
,并使用@abc.abstractmethod
装饰器定义了抽象方法operation
。这意味着所有继承自Product
的具体类都必须实现operation
方法。
继承抽象基类Product,并实现operation方法:
# 具体产品类 1
class ConcreteProduct1(Product):def operation(self):return "ConcreteProduct1 operation"# 具体产品类 2
class ConcreteProduct2(Product):def operation(self):return "ConcreteProduct2 operation"
- 具体产品类:
ConcreteProduct1
和ConcreteProduct2
继承自Product
抽象基类,并实现了operation
方法。每个具体产品类都有自己独特的操作实现。
用枚举类型Enum定义产品的类型:
# 产品类型枚举
class ProductType(Enum):TYPE1 = 1TYPE2 = 2
- 产品类型枚举:使用
enum.Enum
定义了一个枚举类ProductType
,用于表示不同类型的产品。这里定义了两种产品类型TYPE1
和TYPE2
。
创建一个工厂类实现生产细节:
# 工厂类
class Factory:@staticmethoddef create_product(product_type):if product_type == ProductType.TYPE1:return ConcreteProduct1()elif product_type == ProductType.TYPE2:return ConcreteProduct2()else:raise ValueError("Invalid product type")
- 工厂类
Factory
:包含一个静态方法create_product
,该方法接受一个product_type
参数,根据传入的产品类型创建相应的产品实例。如果传入的产品类型无效,会抛出ValueError
异常。
工厂实例化,传入产品类型的参数,调用函数生产产品:
# 客户端代码
if __name__ == "__main__":product1 = Factory.create_product(ProductType.TYPE1)print(product1.operation())product2 = Factory.create_product(ProductType.TYPE2)print(product2.operation())
完整代码如下:
import abc
from enum import Enum# 定义一个抽象基类产品
class Product(metaclass=abc.ABCMeta):@abc.abstractmethoddef operation(self):pass# 具体产品类 1
class ConcreteProduct1(Product):def operation(self):return "ConcreteProduct1 operation"# 具体产品类 2
class ConcreteProduct2(Product):def operation(self):return "ConcreteProduct2 operation"# 产品类型枚举
class ProductType(Enum):TYPE1 = 1TYPE2 = 2# 工厂类
class Factory:@staticmethoddef create_product(product_type):if product_type == ProductType.TYPE1:return ConcreteProduct1()elif product_type == ProductType.TYPE2:return ConcreteProduct2()else:raise ValueError("Invalid product type")# 客户端代码
if __name__ == "__main__":product1 = Factory.create_product(ProductType.TYPE1)print(product1.operation())product2 = Factory.create_product(ProductType.TYPE2)print(product2.operation())
原文地址:https://blog.csdn.net/duomoke/article/details/146516167
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mrgr.cn/news/95847.html 如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mrgr.cn/news/95847.html 如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!