前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >模式设计之「工厂模式」的实现

模式设计之「工厂模式」的实现

作者头像
编程文青李狗蛋
发布2019-07-30 10:26:00
3470
发布2019-07-30 10:26:00
举报

本文字数:1260 字

阅读本文大概需要:4 分钟

设计模式有很多种,比较流行的差不多有 23 种,对于这些模式,我们学习几种常用的即可。尤其对于初学者来说,可以先学习两种最最常用的模式:「单例模式」和「工厂模式」。

「单例模式」已经在之前的文章中讲过,其中还包括对「设计模式」的解释,没有看过的可以点击右侧链接先去看一下:无处不在的「单例设计模式」

00.工厂模式

工厂是干嘛的?工厂是造东西的。同样,「工厂模式」也是用来造东西的,只不过造的这个东西叫「对象」。

看到造「对象」,可能有同学的第一反应是「构造函数」,随着而来的疑问就是:我们既然有了构造函数,为什么还要再搞一个「工厂模式」?

其实工厂模式和其它造对象的还是有差别的,虽然都是造对象,不同情况下的效力是有区别的。工厂模式可以帮助我们在某一些复杂的情况下,更好的对我们造的对象进行一个统一的管理,实现了创造者和构造者的分离

说到「分离」,我在这里再插一句,实际上这些设计模式,很多时候就是用来做分离,这就和平时的分工协作一样,可以让我们的工作做的更专业更有效率。就像越大的企业内部分的越细致,同理越大的软件越需要设计模式。

01.简单实现

下面就用一个简单的例子来演示一下工厂模式。

代码语言:javascript
复制
class Nike:
     """
     耐克
     """
     def __repr__(self):
         return "This is Nike"

class Adidas:
     """
     阿迪
     """
     def __repr__(self):
         return "This is Adidas"

class Champion:
     """
     冠军
     """
     def __repr__(self):
         return "This is Champion"

在上述代码中,我们有 3 种“产品”,分别是 Nike,Adidas 和 Champion,当我们因为贫穷建不成工厂的时候,我们只能自己在代码中实例化:

代码语言:javascript
复制
nike = Nike()
adidas = Adidas()
champion = Champion()

后来走在马路边,捡到 1 分钱,瞬间走上人生巅峰,投资建厂:

代码语言:javascript
复制
class SportFactory:
     """
     简单工厂
     """
     def product_sport(self, name):
         if name == "nike":
             return Nike()
         elif name == "adidas":
             return Adidas()
         elif name == "champion":
             return champion()
         else:
             return "This is else"

有了工厂,终于不用自己实例化了,通过工厂类,向固定接口传入参数,走上了梦寐以求的流水线模式:

代码语言:javascript
复制
nike = SportFactory().product_sport("nike")
adidas = SportFactory().product_sport("adidas")
champion = SportFactory().product_sport("chamption")
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python空间 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档