浅析Python 抽象工厂模式的优缺点

作者:Leetao 时间:2021-08-12 01:33:17 

前言

接着上一篇的故事工厂模式继续,手机要出厂,显然光一个手机肯定是不行的,还需要包装盒、充电器等等东西。我们按照上一篇提到的工厂模式,去建立新的工厂是一点都没有问题的。但是思考一下这样子做会带来的问题,显然工厂太多了,将包装盒、充电器全部分散到各个工厂,组装什么的也是一个大问题,那么有没有更好的办法呢?答案是肯定的,抽象工厂模式。

抽象工厂意图

提供一个创建一系列相关或相互依赖对象的接口,而无需制定它们具体的累。

别名

Kit

案例

第三阶段

光生产手机远远不够,还需要生产其他配件,分散到新的工厂成本太高,也不利于维护,那就把一个类型的手机所需要的所有东西,都放到一个工厂完成,小米工厂生产小米手机以及小米手机配套的东西,苹果手机生产苹果手机以及苹果手机配套的东西,客户只需要关心要什么手机就行了。

第三阶段 UML 图

让我们借助 UML 图直观了解一下这个时候工厂的样子

浅析Python 抽象工厂模式的优缺点

第三阶段代码

通过代码去实现这个逻辑


from abc import ABC, abstractmethod

# 抽象手机
class AbstractMobile(ABC):

@abstractmethod
def make(self):
 pass

class XiaoMiMobile(AbstractMobile):

def make(self):
 print("make xiaomi mobile")

class AppleMobile(AbstractMobile):

def make(self):
 print("make apple mobile")

# 抽象手机配件
class AbstractOthers(ABC):

@abstractmethod
def make(self):
 pass

class XiaoMiOthers(AbstractMobile):

def make(self):
 print("make xiaomi others")

class AppleOthers(AbstractMobile):

def make(self):
 print("make apple others")

# 抽象工厂
class AbstractFactory(ABC):
@abstractmethod
def create_mobile(self) -> AbstractMobile:
 pass

@abstractmethod
def create_others(self) -> AbstractOthers:
 pass

class XiaoMiFactory(AbstractFactory):

def create_mobile(self) -> XiaoMiMobile:
 return XiaoMiMobile().make()

def create_others(self) -> XiaoMiOthers:
 return XiaoMiOthers().make()

class AppleFactory(AbstractFactory):

def create_mobile(self) -> AppleMobile:
 return AppleMobile().make()

def create_others(self) -> AppleOthers:
 return AppleOthers().make()

def client(factory: AbstractFactory) -> None:
product_mobile = factory.create_mobile()
product_others = factory.create_others()

if __name__ == "__main__":
client(XiaoMiFactory())
client(AppleFactory())

看一下运行结果:

make xiaomi mobile
make xiaomi others
make apple mobile
make apple others

总结

如果代码需要与多个不同系列的相关产品交互, 但是由于无法提前获取相关信息, 或者出于对未来扩展性的考虑, 你不希望代码基于产品的具体类进行构建, 在这种情况下, 你可以使用抽象工厂。
在设计良好的程序中, 每个类仅负责一件事。 如果一个类与多种类型产品交互, 就可以考虑将工厂方法抽取到独立的工厂类或具备完整功能的抽象工厂类中。

抽象工厂的优缺点

优点

  • 你可以确保同一工厂生成的产品相互匹配。

  • 你可以避免客户端和具体产品代码的耦合。

  • 单一职责原则。 你可以将产品生成代码抽取到同一位置, 使得代码易于维护。

  • 开闭原则。 向应用程序中引入新产品变体时, 你无需修改客户端代码

缺点

  • 由于采用该模式需要向应用中引入众多接口和类, 代码可能会比之前更加复杂,即产品族扩展非常困难

来源:https://www.cnblogs.com/leetao94/p/13291508.html

标签:Python,抽象工厂模式,优缺点
0
投稿

猜你喜欢

  • 让ASP搭配MYSQL

    2009-10-04 20:30:00
  • SQL查询效率:100w数据查询只需要1秒钟

    2008-12-09 14:36:00
  • PHP IN_ARRAY 函数使用注意事项

    2023-11-16 19:24:24
  • 定义列表: DL DT DD

    2009-05-06 13:08:00
  • CSS pointer-events下层元素被点击

    2010-04-11 22:31:00
  • Python+Pygame实战之泡泡游戏的实现

    2023-05-19 15:40:58
  • vuejs实现ready函数加载完之后执行某个函数的方法

    2024-05-29 22:48:43
  • Python标准模块--ContextManager上下文管理器的具体用法

    2022-03-02 00:22:24
  • 20行Python代码实现视频字符化功能

    2023-01-08 21:17:02
  • Pycharm-community-2020.2.3 社区版安装教程图文详解

    2022-07-02 06:30:00
  • 一文详解pygame.sprite的精灵碰撞

    2022-08-13 23:09:11
  • 简单讲解Python编程中namedtuple类的用法

    2022-05-30 23:32:18
  • python中MethodType方法介绍与使用示例

    2022-09-08 03:28:50
  • python贪吃蛇核心功能实现下

    2021-08-23 00:32:37
  • pytz格式化北京时间多出6分钟问题的解决方法

    2021-07-31 14:10:21
  • Python-while 计算100以内奇数和的方法

    2022-03-24 12:00:39
  • Python中的字符串操作和编码Unicode详解

    2021-02-24 18:37:11
  • asp如何让页面背景五彩缤纷?

    2010-05-13 16:38:00
  • python基础详解之if循环语句

    2022-04-17 02:14:09
  • Codeigniter发送邮件的方法

    2023-11-15 05:08:25
  • asp之家 网络编程 m.aspxhome.com