首页 > 编程语言 >Python设计模式-01工厂模式

Python设计模式-01工厂模式

时间:2023-06-07 20:22:29浏览次数:45  
标签:product 01 Python 创建 use 模式 工厂 抽象 设计模式

工厂模式

工厂模式(Factory Pattern)是一种创建型设计模式,它提供了一种创建对象的最佳方式,而无需指定将要创建的对象的确切类。工厂模式通过定义一个工厂接口来创建对象,让子类决定实例化哪个类。这样可以将对象的创建与使用分离,从而降低系统的耦合度。

工厂模式包含三种角色:

  • 具体工厂(Concrete Factory):实现了工厂接口,用于创建具体的产品。
  • 产品(Product):定义了工厂创建的对象的接口。

以下是一个简单的Python示例代码,演示了工厂模式的实现:

from abc import ABC, abstractmethod

# 抽象产品
class Product(ABC):
    @abstractmethod
    def use(self):
        pass

# 具体产品A
class ProductA(Product):
    def use(self):
        print("ProductA is used.")

# 具体产品B
class ProductB(Product):
    def use(self):
        print("ProductB is used.")

# 工厂
class Factory:
    def create_product(self, product_type):
        if product_type == "A":
            return ProductA()
        elif product_type == "B":
            return ProductB()
        else:
            raise ValueError("Invalid product type.")

# 客户端代码
factory = Factory()
product_a = factory.create_product("A")
product_a.use()

product_b = factory.create_product("B")
product_b.use()

抽象工厂

普通工厂模式和抽象工厂模式都是工厂模式的变体,它们的主要区别在于抽象工厂模式可以创建一组相关的产品,而普通工厂模式只能创建单一的产品。

普通工厂模式(Factory Pattern)是一种创建型设计模式,它提供了一种创建对象的最佳方式,而无需指定将要创建的对象的确切类。普通工厂模式通过定义一个工厂接口来创建对象,让子类决定实例化哪个类。这样可以将对象的创建与使用分离,从而降低系统的耦合度。

抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,它提供了一种创建一组相关或相互依赖对象的最佳方式,而无需指定它们的具体类。抽象工厂模式通过定义一个工厂接口来创建对象,让子类决定实例化哪个类。这样可以将对象的创建与使用分离,从而降低系统的耦合度。

普通工厂模式只能创建单一的产品,而抽象工厂模式可以创建一组相关的产品。例如,一个汽车工厂可以生产多种型号的汽车,每种型号的汽车都由不同的部件组成。在普通工厂模式中,只能创建单一型号的汽车,而在抽象工厂模式中,可以创建一组相关的部件,从而生产多种型号的汽车。

另外,普通工厂模式只需要一个工厂类,而抽象工厂模式需要多个工厂类。在普通工厂模式中,工厂类负责创建单一的产品,而在抽象工厂模式中,每个工厂类负责创建一组相关的产品。

总之,普通工厂模式和抽象工厂模式都是工厂模式的变体,它们的主要区别在于抽象工厂模式可以创建一组相关的产品,而普通工厂模式只能创建单一的产品。选择哪种模式取决于具体的需求。

from abc import ABC, abstractmethod

# 抽象产品
class Product(ABC):
    @abstractmethod
    def use(self):
        pass

# 具体产品A
class ProductA(Product):
    def use(self):
        print("ProductA is used.")

# 具体产品B
class ProductB(Product):
    def use(self):
        print("ProductB is used.")

# 抽象工厂
class Factory(ABC):
    @abstractmethod
    def create_product(self):
        pass

# 具体工厂A
class FactoryA(Factory):
    def create_product(self):
        return ProductA()

# 具体工厂B
class FactoryB(Factory):
    def create_product(self):
        return ProductB()

# 客户端代码
factory_a = FactoryA()
product_a = factory_a.create_product()
product_a.use()

factory_b = FactoryB()
product_b = factory_b.create_product()
product_b.use()

在这个示例代码中,首先定义了抽象产品Product和抽象工厂Factory。然后定义了两个具体产品ProductA和ProductB,以及两个具体工厂FactoryA和FactoryB。最后在客户端代码中,分别使用FactoryA和FactoryB创建了ProductA和ProductB,并调用了它们的use方法。

工厂模式的优点在于它可以将对象的创建与使用分离,从而降低系统的耦合度。同时,工厂模式也可以很容易地扩展,只需要添加新的具体产品和具体工厂即可。

标签:product,01,Python,创建,use,模式,工厂,抽象,设计模式
From: https://www.cnblogs.com/superhin/p/17464461.html

相关文章

  • python opencv图片旋转任意角度
    pythonopencv图片旋转任意角度 importcv2#Loadtheimageimg=cv2.imread("20230222100736979.jpg")#Gettheimagedimensionsheight,width=img.shape[:2]#Settherotationangleangle=25#Calculatetherotationmatrixrotation_matrix=cv2......
  • Java设计模式-适配器模式
    适配器模式(AdapterPattern)是一种常见的设计模式,它主要用于在不改变现有系统结构的情况下,将一个类的接口转换成客户端所期望的另一个接口。在本文中,我们将介绍适配器模式的基本概念、实现方法以及优缺点,并探讨适配器模式在Java编程语言中的具体应用。简介适配器模式是一种结构型......
  • 【python】一个同步的队列类queue
    queuequeue 模块实现了多生产者、多消费者队列。这特别适用于消息必须安全地在多线程间交换的线程编程。模块中的 Queue 类实现了所有所需的锁定语义。 函数作用Queue.qsize()返回队列的大致大小。注意,qsize()>0不保证后续的get()不被阻塞,qsize()<maxsize......
  • python大数据分析-睡眠健康数据分析
     一、选题的背景 睡眠健康在当代社会中具有重要的意义。随着现代生活方式的改变和工作压力的增加,许多人面临着睡眠问题和健康隐患。因此,对于睡眠健康进行数据分析可以提供有价值的洞察和解决方案,改善人们的生活质量和健康状况。数据分析目标:该数据分析的目标是深入了解睡眠健......
  • 软件测试3班,学员就业前的模拟面试(2019-9-12)(金朝阳)
    1:你用过Fiddler在项目中发现过哪些有价值的bug?2:接口测试,返回的数据格式类型一般有哪些类型?(Json\xml\html等等)3:App兼容性测试怎么做?APP升级测试怎么做?4:你测试过哪些类型的安卓机型?哪些类型的苹果机型?5:你测试过安卓机型的操作系统是多少?苹果机型的操作系统是多少?6:你在做接口测试的......
  • 软测5班Loadrunner阶段性考试(2019-10-19)
    试题1:用你在Loadrunner中所学习的知识,将“欢迎来到然学科技”保存为一个变量,并且在日志中打印输出(10分)。答案:lr_save_string("欢迎来到科技","ranther");lr_output_message("你好:%s",lr_eval_string("{ran}"));试题2:Loadrunner中如何保持每次参数取值的唯一性(2分)?Unique+Once(保持......
  • 软测5班jmeter笔记(2019-10-29)
    接口测试理论自动化测试的金字塔模型硬件接口:比如usb接口,电源接口、耳机接口...软件接口:数据系统访问接口、http请求接口...为什么要做接口测试Web前端:指用户可以直观操作和看到的界面。html,Css样式,javascript脚本。android和ios等。web后端:是指与数据库交互进行处理响应的业务......
  • Python time strftime() 方法的使用
    1、描述strftime()用于格式化时间,返回以可读字符串表示的时间,格式自定义。2、说明python中日期和时间的格式化符号有很多,下面列举常用的符号: %y两位数的年份表示(00-99) %Y四位数的年份表示(000-9999) %m月份(01-12) %d月内中的一天(0-31) %H24小......
  • Day01
    1.标题标题:#+空格+标题名,几级标题就是几个#号,最多支持6级标题2.字体格式字体加粗:**+文字内容+**字体加粗:两个下划线+文字内容+两个下划线字体斜体:*+文字内容+*字体斜体:下划线+文字内容+下划线斜体加粗:三个星号+文字内容+三个星号斜体加粗:三......
  • Python | assert的使用
    如果你在看python代码的时候,会在一些代码中看到assert关键字的语句。本文重点介绍Assert语句的作用以及什么时候应该使用该语句。什么是断言程序运行过程中,所有变量的当前值组合构成了“状态”;每执行一段程序,状态就发生变化;如果程序有逻辑错误的bug,必定在某处变量值的组合......