首页 > 编程语言 >Python设计模式详解之3 —— 抽象工厂模式

Python设计模式详解之3 —— 抽象工厂模式

时间:2024-11-19 09:17:46浏览次数:3  
标签:return Python self 工厂 详解 产品 设计模式 class def

抽象工厂模式也是一种创建型设计模式,它提供一个接口,用于创建一系列相关或相互依赖的对象,而无需指定它们的具体类。它特别适合在需要创建多个相关对象且这些对象在逻辑上属于一个“产品族”时使用。

结构:
  • 抽象产品:定义了产品家族中每个产品的接口。
  • 具体产品:实现抽象产品接口的具体类。
  • 抽象工厂:声明了创建一系列相关产品的方法。
  • 具体工厂:实现抽象工厂接口,提供具体产品的实例。
实现方式:
from abc import ABC, abstractmethod

# 抽象产品类
class Chair(ABC):
    @abstractmethod
    def sit_on(self):
        pass

class Sofa(ABC):
    @abstractmethod
    def lie_on(self):
        pass

# 具体产品类
class VictorianChair(Chair):
    def sit_on(self):
        return "Sitting on a Victorian Chair."

class ModernChair(Chair):
    def sit_on(self):
        return "Sitting on a Modern Chair."

class VictorianSofa(Sofa):
    def lie_on(self):
        return "Lying on a Victorian Sofa."

class ModernSofa(Sofa):
    def lie_on(self):
        return "Lying on a Modern Sofa."

# 抽象工厂类
class FurnitureFactory(ABC):
    @abstractmethod
    def create_chair(self):
        pass

    @abstractmethod
    def create_sofa(self):
        pass

# 具体工厂类
class VictorianFurnitureFactory(FurnitureFactory):
    def create_chair(self):
        return VictorianChair()
    
    def create_sofa(self):
        return VictorianSofa()

class ModernFurnitureFactory(FurnitureFactory):
    def create_chair(self):
        return ModernChair()
    
    def create_sofa(self):
        return ModernSofa()

# 使用示例
factory = VictorianFurnitureFactory()
chair = factory.create_chair()
sofa = factory.create_sofa()
print(chair.sit_on())  # 输出 "Sitting on a Victorian Chair."
print(sofa.lie_on())   # 输出 "Lying on a Victorian Sofa."
优点:
  • 一致性:确保同一产品族的对象之间可以协作。
  • 解耦:客户端代码与具体类解耦,使得代码更灵活和易于维护。
  • 符合开闭原则:添加新的产品族时,只需添加新的具体工厂类即可,无需修改已有代码。
缺点:
  • 复杂性增加:需要为每个产品族定义新的具体工厂,类的数量会显著增加。
  • 扩展困难:增加新的产品接口(如添加Table)需要修改所有的工厂接口及其实现。
适用场景:
  • 系统需要创建一系列相关的产品对象,而这些对象在逻辑上属于一个产品族。
  • 系统希望提供产品族的多个变体,但保证客户端只使用同一变体的对象。

抽象工厂模式 vs. 简单工厂模式 vs. 工厂方法模式

  1. 简单工厂模式

    • 创建对象方式:通过一个工厂类的静态方法根据输入创建对象。
    • 优点:实现简单,易于使用。
    • 缺点:不符合开闭原则,扩展性差。
    • 适用场景:适合创建少量、简单对象的场景。
  2. 工厂方法模式

    • 创建对象方式:通过子类实现的工厂方法创建具体对象。
    • 优点:符合开闭原则,每新增产品只需扩展具体工厂类。
    • 缺点:增加了实现复杂度和类的数量。
    • 适用场景:适合创建多种对象,且需要易于扩展的场景。
  3. 抽象工厂模式

    • 创建对象方式:通过具体工厂创建一系列相关或相互依赖的对象。
    • 优点:能够保证同一产品族对象的协作一致性,符合开闭原则。
    • 缺点:实现复杂,扩展产品结构较困难。
    • 适用场景:适合需要创建一系列相关对象的场景,确保产品之间的一致性。

总结对比:

  • 简单工厂模式更适合简单和小规模的对象创建需求,缺乏扩展性。
  • 工厂方法模式提供了更高的灵活性,允许创建不同类型的对象,但实现上增加了类的复杂度。
  • 抽象工厂模式适合复杂系统中需要创建多个相关产品族的场景,保障产品族内对象的一致性,尽管它在实现上最为复杂。

标签:return,Python,self,工厂,详解,产品,设计模式,class,def
From: https://blog.csdn.net/huaanxiang/article/details/143843952

相关文章

  • (分享源码)计算机毕业设计必看必学 上万套实战教程手把手教学JAVA、PHP,node.js,C++、pyth
     摘 要21世纪的今天,随着社会的不断发展与进步,人们对于信息科学化的认识,已由低层次向高层次发展,由原来的感性认知向理性认知提高,管理工作的重要性已逐渐被人们所认识,科学化的管理,使信息存储达到准确、快速、完善,并能提高工作管理效率,促进其发展。论文主要是对医疗门诊管理......
  • (分享源码)计算机毕业设计必看必学 上万套实战教程手把手教学JAVA、PHP,node.js,C++、pyth
     摘 要随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,校园跳蚤市场管理系统被用户普遍使用,为方便用户能够可以随时进行校园跳蚤市场管理系统的数据信息管理,特开发了基于spri......
  • AI豆包-Python SDK接入流程(完整代码)
    在当今的软件开发领域,与各类人工智能模型进行交互以获取智能回复是一项常见且重要的任务。本文将聚焦于一个名为 doubao 的Python函数,详细剖析它是如何与特定的人工智能模型进行连接并获取回复的,为大家揭示其背后的技术细节。Python实现AI豆包智能回复微信运行结果:第......
  • Python课程设计之俄罗斯方块
    资源结构源码文件(可通过pycharm直接运行)tk.exe(打包好的程序,可双击运行)实验报告(最重要的一部分,本实验报告完全基于学校要求认真编写的,并获得了优秀的评分)程序运行视图程序启动步骤使用pycharm打开tk.py文件设计拦截器为python3.10点击启动按钮启动可执行程序-tk.e......
  • Java设计模式 —— Java七大设计原则详解
    文章目录前言一、单一职责原则1、概述2、案例演示二、接口隔离原则1、概述2、案例演示三、依赖倒转原则1、概述2、案例演示四、里氏替换原则1、概述2、案例演示五、开闭原则1、概述2、案例演示六、迪米特法则1、概述2、案例演示七、合成/聚合复用原则1、概述......
  • python毕设车位预约小程序程序+论文
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、选题背景关于车位预约小程序的研究,现有研究多集中在大型停车场管理系统或者通用的预约平台方面,专门针对以Python实现的车位预约小程序的研究较......
  • 用pip进行安装时提示“Package requires a different Python: 3.8.10 not in ‘>=3.9‘
    用pip进行安装时提示“PackagerequiresadifferentPython:3.8.10notin'>=3.9'“报错“Package'dpgen-0.12.2.dev1-g6943db5'requiresadifferentPython:3.8.10notin'>=3.9'”修改pip关联的python版本way1修改pip关联的python版本way2报错“Package‘......
  • 安装时提示“the ssl module in Python is not available”
    安装时提示“thesslmoduleinPythonisnotavailable”在安装dpgen时运行“pipinstall--user.”提示“WARNING:pipisconfiguredwithlocationsthatrequireTLS/SSL,howeverthesslmoduleinPythonisnotavailable.”尝试过安装openssl没有效果,如下所......
  • Jupyter的全面探索:从入门到高级应用 ,安装最常见的是使用Python的包管理器pip或Anacond
    Jupyter的全面探索:从入门到高级应用,安装最常见的是使用Python的包管理器pip或Anaconda发行版1.引言Jupyter项目的简介Jupyter项目是一个开源项目,旨在为科学计算、数据分析和教育提供交互式计算和数据科学环境。它允许用户创建和共享包含实时代码、方程、可视化以及叙述性......
  • 【Python入门】探索Python字符串的奥秘:常用方法全解析
    ......