浅谈python的工厂方法模式

工厂模式分为简单工厂模式,工厂模式,抽象工厂模式。其实就是对面向对象开发由浅入深,由具体到抽象的一种设计理念。

简单工厂模式

简单的单类解决问题,写好类后,在工厂接口类在里通过判断区分到底应该实例化哪一个类。
缺点在于每次实例化需要传参,而且添加新内容时候,判断中还需新入口词。违背开放-封闭原则,即可扩展,少修改的原则。

class Languagepass

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混合类提取,并重复继承。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值