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

640

640

本文字数:1260 字

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

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

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

00.工厂模式

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

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

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

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

01.简单实现

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

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,当我们因为贫穷建不成工厂的时候,我们只能自己在代码中实例化:

nike = Nike()
adidas = Adidas()
champion = Champion()

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

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"

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

nike = SportFactory().product_sport("nike")
adidas = SportFactory().product_sport("adidas")
champion = SportFactory().product_sport("chamption")

640?wx_fmt=gif

[技巧篇] 循环代码优化技巧。

奇怪的 Python 整数缓存机制。

[超详细] 手把手带你发布自己的专属模块!

无处不在的「单例设计模式」

640?wx_fmt=jpeg

?扫描上方二维码即可关注

发布了608 篇原创文章 · 获赞 5767 · 访问量 80万+

猜你喜欢

转载自blog.csdn.net/u013486414/article/details/97336770