本文字数: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")