专业版:
https://blog.csdn.net/qq_27825451/article/details/84246759
非专业版:
想要看懂这篇文章,得先看上一篇,因为用的比喻是类似的
https://blog.csdn.net/wangsais54977/article/details/105573894
工厂方法(函数)模式应用的场景和简单工厂模式是一致的,只是工厂方法模式更符合开闭原则了。
如果说简单工厂模式是一家小工厂的话,那工厂方法模式就可以理解为一个工业园区
,工业园区中有很多企业
,每个企业只生产自己的产品,但工业园区中的每个企业必须要遵守园区的规则(这是核心)
,工业园区就想简单工厂模式中的food,企业就像简单工厂模式中的水果。
来看代码
# 企业
class Pea:
def create_fruit(self):
print('Pea')
class Kale:
def create_fruit(self):
print('Kale')
class Celery:
def create_fruit(self):
print('Celery')
# 园区规则
class FoodFactory:
def create_fruit(self):
pass
# Kale企业
class KaleFactory(FoodFactory):
def create_fruit(self, name):
if name == 'Kale':
return Kale()
# Pea企业
class PeaFactory(FoodFactory):
def create_fruit(self, name):
if name == 'Pea':
return Pea()
# Celery企业
class CeleryFactory(FoodFactory):
def create_fruit(self, name):
if name == 'Celery':
return Celery()
if __name__ == '__main__':
kale = KaleFactory().create_fruit('Kale').create_fruit()
Pea = PeaFactory().create_fruit('Pea').create_fruit()
Celery = CeleryFactory().create_fruit('Celery').create_fruit()
结果
Kale
Pea
Celery
工厂方法模式将原来的if语句拆分成类,每个if支路变成一个具体的工厂类,每个具体的工厂类继承统一的工厂类(这个不就相当于园区的规则吗)。
这就解决了修改代码的问题,你想想,如果要新增一个企业,我们只要新增一个企业类和一个企业工厂类就完事了,不用修改以前的代码。
看新增一个apple类的例子:
# 企业
class Pea:
def create_fruit(self):
print('Pea')
class Kale:
def create_fruit(self):
print('Kale')
class Celery:
def create_fruit(self):
print('Celery')
# 新苹果类
class Apple:
def create_fruit(self):
print('Apple')
# 园区规则
class FoodFactory:
def create_fruit(self):
pass
# Kale企业
class KaleFactory(FoodFactory):
def create_fruit(self, name):
if name == 'Kale':
return Kale()
# Pea企业
class PeaFactory(FoodFactory):
def create_fruit(self, name):
if name == 'Pea':
return Pea()
# Celery企业
class CeleryFactory(FoodFactory):
def create_fruit(self, name):
if name == 'Celery':
return Celery()
# 新苹果企业
class AppleFactory(FoodFactory):
def create_fruit(self, name):
if name == 'Apple':
return Apple()
但是,还是有问题,如果类很多很多的话,要新建很多很多的水果类和水果企业类,也太麻烦了,
因此大佬又出现了。
某天晚上,大佬看着满屏的代码,思考我能不能再把它升级下,让它再次进化,想了一夜也没想到如何实现。
早晨,蹲坑正用力时,突然一道灵光如开天辟地时第一道真理之光一样照进大佬的脑中,他马上提上裤子,跑到电脑旁开始撸码!
抽象工厂模式就此诞生!!