首页 > 编程语言 >Python 工厂模式

Python 工厂模式

时间:2024-09-11 21:51:38浏览次数:10  
标签:product return Python self Product 模式 工厂 class def

在Python中,工厂模式(Factory Pattern)是一种常用的创建型设计模式,用于创建对象时不会将具体类的信息暴露给客户端,而是通过一个共同的接口来指向新创建的对象。工厂模式主要用来创建复杂对象,并隐藏实例化逻辑,使得客户端代码与具体类的实现解耦,从而提高系统的灵活性和可扩展性。

工厂模式主要有三种形式:简单工厂模式(Simple Factory Pattern)、工厂方法模式(Factory Method Pattern)和抽象工厂模式(Abstract Factory Pattern)。

1. 简单工厂模式(Simple Factory Pattern)

简单工厂模式通过一个工厂类来创建对象,这个工厂类根据传入的参数决定创建哪一种类的实例。

class ProductA:
    def operation(self):
        return "Product A"

class ProductB:
    def operation(self):
        return "Product B"

class Factory:
    @staticmethod
    def create_product(product_type):
        if product_type == "A":
            return ProductA()
        elif product_type == "B":
            return ProductB()

# 使用
product_a = Factory.create_product("A")
print(product_a.operation())  # 输出: Product A

product_b = Factory.create_product("B")
print(product_b.operation())  # 输出: Product B

2. 工厂方法模式(Factory Method Pattern)

工厂方法模式将对象的创建延迟到子类中进行,工厂类提供一个创建对象的接口,让子类决定实例化哪一个类。

class Product:
    def operation(self):
        pass

class ConcreteProductA(Product):
    def operation(self):
        return "Product A"

class ConcreteProductB(Product):
    def operation(self):
        return "Product B"

class Creator:
    def factory_method(self):
        raise NotImplementedError("子类必须实现这个方法")

    def some_operation(self):
        product = self.factory_method()
        return product.operation()

class ConcreteCreatorA(Creator):
    def factory_method(self):
        return ConcreteProductA()

class ConcreteCreatorB(Creator):
    def factory_method(self):
        return ConcreteProductB()

# 使用
creator_a = ConcreteCreatorA()
print(creator_a.some_operation())  # 输出: Product A

creator_b = ConcreteCreatorB()
print(creator_b.some_operation())  # 输出: Product B

3. 抽象工厂模式(Abstract Factory Pattern)

抽象工厂模式提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。

class AbstractProductA:
    def __init__(self):
        pass

    def use(self):
        raise NotImplementedError

class AbstractProductB:
    def __init__(self):
        pass

    def eat(self):
        raise NotImplementedError

class ProductA1(AbstractProductA):
    def use(self):
        return "Product A1"

class ProductA2(AbstractProductA):
    def use(self):
        return "Product A2"

class ProductB1(AbstractProductB):
    def eat(self):
        return "Product B1"

class ProductB2(AbstractProductB):
    def eat(self):
        return "Product B2"

class AbstractFactory:
    def create_product_a(self):
        raise NotImplementedError

    def create_product_b(self):
        raise NotImplementedError

class ConcreteFactory1(AbstractFactory):
    def create_product_a(self):
        return ProductA1()

    def create_product_b(self):
        return ProductB1()

class ConcreteFactory2(AbstractFactory):
    def create_product_a(self):
        return ProductA2()

    def create_product_b(self):
        return ProductB2()

# 使用
factory1 = ConcreteFactory1()
product_a1 = factory1.create_product_a()
print(product_a1.use())  # 输出: Product A1

product_b1 = factory1.create_product_b()
print(product_b1.eat())  # 输出: Product B1

factory2 = ConcreteFactory2()
product_a2 = factory2.create_product_a()
print(product_a2.use())  # 输出: Product A2

product_b2 = factory2.create_product_b()
print(product_b2.eat())  # 输出: Product B2

每种工厂模式都有其适用场景,选择哪种模式取决于具体的设计需求和系统复杂度。

Python 工厂模式_python

标签:product,return,Python,self,Product,模式,工厂,class,def
From: https://blog.51cto.com/u_15266301/11984069

相关文章

  • flask+python抗洪救灾管理系统 2rucy-django毕业设计项目
    目录技术栈和环境说明具体实现截图预期达到的目标系统设计详细视频演示技术路线解决的思路性能/安全/负载方面可行性分析论证python-flask核心代码部分展示python-django核心代码部分展示研究方法感恩大学老师和同学源码获取技术栈和环境说明本系统以Python开发语言......
  • 基于python+flask框架的学生综合测评管理系统(开题+程序+论文) 计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着教育信息化的不断深入,传统的学生综合测评方式已难以满足现代高校对学生全面、客观评价的需求。传统方法往往依赖于纸质记录与人工计算......
  • 基于python+flask框架的基于安卓的音乐播放器系统(开题+程序+论文) 计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着移动互联网技术的飞速发展,智能手机已成为人们日常生活中不可或缺的一部分,而音乐作为人类情感表达的重要媒介,其播放与分享方式也随之发......
  • 基于python+flask框架的健身房管理系统(开题+程序+论文) 计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着健康意识的不断提升,健身房已成为现代人追求健康生活的重要场所。然而,随着健身房规模的扩大和会员数量的激增,传统的人工管理模式已难以......
  • Python基础
    目录1.常见字面量2.Python中的注释3.Python中的变量变量是什么?及作用?变量的格式?变量的特征?4.Python中查看数据的数据类型5.Python数据类型的转换(字符串,整数,浮点数)6.Python中的标识符1.用户编写代码时,对变量.类.方法等编写的名字,叫做标识符.2.标识符命名......
  • 【python脚本】springboot检测脚本
    原创CatalyzeSecimportrequestsimporturllib3urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)session=requests.session()#从文本文件中读取withopen('dic.txt','r')asfile:paths=file.readlines()#移除每个末尾的换行符......
  • Python(二)-运算符
    常见的运算符(1)算术运算符:+、-、*、/、//、%、**;(2)赋值运算符:=、+=、-=、*=、/=、//=、%=、**=;(3)比较运算符:>、<、>=、<=、==、!=;(4)逻辑运算符:not、and、or。算术运算符算术运算符名称描述+加法两个数相加,如6+12=18。-减法两个数相减,如25-9=16。*乘法两个数相乘,如3*7=......
  • 大白话python——下
    书接上回,本文将讨论以下几点,请看目录5.7运算符5.7.1算数运算符5.7.2赋值运算符5.7.3复合赋值运算符5.7.4比较运算符5.7.5逻辑运算符5.8条件语句5.8.1if语句格式5.8.2条件语句举例5.8.3三目运算符5.9循环语句5.9.1循环语句格式5.9.2for循环5.9.3while循环5......
  • 基于python+flask框架的新冠疫情志愿者管理系统设计与实现(开题+程序+论文) 计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景自新冠疫情爆发以来,全球范围内对公共卫生应急响应的需求急剧增加,志愿者作为社会力量的重要组成部分,在疫情防控中发挥了不可替代的作用。从......
  • 基于python+flask框架的银行理财产品推荐系统(开题+程序+论文) 计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着金融市场的日益繁荣与居民财富的不断增长,银行理财产品作为重要的资产配置工具,其种类与复杂性也随之增加。面对琳琅满目的理财产品,投资......