工厂模式分为简单工厂模式,工厂模式,抽象工厂模式。其实就是对面向对象开发由浅入深,由具体到抽象的一种设计理念。
简单工厂模式
简单的单类解决问题,写好类后,在工厂接口类在里通过判断区分到底应该实例化哪一个类。
缺点在于每次实例化需要传参,而且添加新内容时候,判断中还需新入口词。违背开放-封闭原则,即可扩展,少修改的原则。
class Language:
pass
class English(Language):
def speak(self):
pass
class Chinese(Language):
def speak(self):
pass
class CountryFactory:
def get_language(self, country):
if country == "EN":
return English()
elif country == "CN":
return Chinese()
工厂模式
以下例子,通过子类工厂继承的方式决定实例化的对象。
class CountryFactory:
def get_language():
pass
class EnglishFactory(CountryFactory):
def get_language():
return English()
class ChineseFactory(CountryFactory):
def get_language():
return Chinese()
抽象工厂模式
抽象工厂模式是工厂模式的进阶,是可以在工厂实现多个功能的模式。
缺点是每增加一个产品,相应的也要增加一个子工厂,加大了额外的开发量。
class Custom:
pass
class West(Custom):
def Living(self):
pass
class East(Custom):
def Living(self):
pass
class CountryFactory:
def get_language(self):
pass
def get_custom(self):
pass
class EnglishFactory(CountryFactory):
def get_language(self):
return English()
def get_custom(self):
return West()
class ChineseFactory(CountryFactory):
def get_language(self):
return Chinese()
def get_custom(self):
return East()
个人认为,在抽象工厂模式下,随着产品的增多,子工厂数也会大量的增加,对与维护成本会增加。所有可以考虑使用mixin模式,将重复的功能类作为mixin混合类提取,并重复继承。