• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

浅析Python 简单工厂模式和工厂方法模式的优缺点

python 搞代码 4年前 (2022-01-09) 22次浏览 已收录 0个评论

前言

在《设计模式》一书中工厂模式提到了:

  • 工厂方法模式(Factory Method)
  • 抽象工厂模式 (Abstract Factory)

但是在实际过程中还有一种工厂模式经常被使用,那就是 简单工厂模式(Simple Factory)。有一种常见的分类的方法:根据产品是由具体产品还是具体工厂可以分为 工厂方法模式 和 简单工厂模式;根据工厂的抽象程度可以分为 工厂方法模式 和 抽象工厂模式。接下来会通过例子对比简单工厂模式和工厂方法模式。

工厂意图

定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method 使一个类的实例化延迟到其子类。

别名

虚构造器(Virtual Constructor)

案例

第一阶段

小李开了一个代工厂,专门帮各大厂商生产手机,一开始只有小米找他生产小米手机(MiPhone),后来质量过硬,声名远播,苹果公司也找上门了,准备让他生产苹果手机,生意来了,小李小手一挥,停工几个月,加了一个生产线专门生成苹果手机(Iphone)。于是乎,现在一个工厂有两个生产线。

第一阶段 UML 图

让我们借助 UML 图直观了解一下工厂现在的样子。

第一阶段代码

通过代码去实现这个逻辑

from abc import ABC, abstractmethod

# 手机
class Phone(AB<i>本文来源gaodai$ma#com搞$代*码*网</i>C):
 
 @abstractmethod
 def make(self):
  pass

# 苹果手机
class Apple(Phone):
 
 def make(self):
  print("make apple")

# 小米手机
class XiaoMi(Phone):
 
 def make(self):
  print("make xiaomi")


class Factory:

 def product_phone(self, mobile_type):
  if mobile_type == 'apple':
   return Apple()
  else:
   return XiaoMi()


if __name__ == '__main__':
 factory = Factory()
 factory.product_phone('apple').make()
 factory.product_phone('xiaomi').make()

看一下运行结果:

make apple
make xiaomi

第二阶段

随着第一阶段的订单完成,现在越来越多的手机厂商来找小李来生产手机,问题来了,生产线改造需要导致整个工厂停工一段时间,每次停工对工厂来说都是巨大的损失。那么该怎么解决问题呢?一个工厂似乎不够用了,那么该怎么解决呢? 把所有的生产线独立出来到单独的工厂,这样子需要生产新的手机只需要新增新的工厂就好了,不会影响其他的手机的生产。

第二阶段 UML 图

同样让我们借助 UML 图了解一下这个阶段工厂的样子吧。

第二阶段代码

同样让我们借助代码去实现这一阶段的逻辑

from abc import ABC, abstractmethod

# 抽象工厂
class AbastractFactory(ABC):
 
 @abstractmethod
 def product_phone(self):
  pass

# 苹果工厂
class AppleFactory(AbastractFactory):
 
 def product_phone(self):
  return Apple().make()

# 小米工厂
class XiaomiFactory(AbastractFactory):
 
 def product_phone(self):
  return XiaoMi().make()
 

# 生产线
class Phone(ABC):
 	
 @abstractmethod
 def make(self):
  pass

# 苹果生产线
class Apple(Phone):
 
 def make(self):
  print("make apple")

# 小米生产线
class XiaoMi(Phone):
 
 def make(self):
  print("make xiaomi")

def client_product(factory:AbastractFactory):
 return factory

if __name__ == '__main__':
 xiaomi = client_product(XiaomiFactory())
 xiaomi.product_phone()
 apple = client_product(AppleFactory())
 apple.product_phone()

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:浅析Python 简单工厂模式和工厂方法模式的优缺点

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址