设计模式-简单工厂模式

简单工厂模式

一种创建形设计模式
大概意思就是通过一个工厂类来创建对象实例,像工厂生产产品一样
举例


from abc import ABCMeta,abstractmethod

#这个类就是底层和上层的抽象
#这个就是抽象
class payment(object):
	__metaclass__ =  ABCMeta
	@abstractmethod
	def pay(self,money):
		pass

#这两个支付类就是模拟底层的实现逻辑
#下面是细节
class AliPay(payment):
	def pay(self,money):
		print "支付宝支付%d" % money
		pass

class WeChatPay(payment):
	def pay(self,money):
		pass

#工厂类,批量生产对象
class PaymentFactoryClass(object):
	def create_payment_obj(self, pay_kind):
		if pay_kind == "alipay":
			return AliPay()
		elif pay_kind == "wechat":
			return WeChatPay()
		else:
			#没有这个支付模式
			print "....."

#模拟上层调用逻辑
pf = PaymentFactoryClass()
p = pf.create_payment_obj("alipay")
p.pay(100)
#抽象不应该依赖于细节,细节应该依赖于抽象

工厂类可以生产对象,然后通过对象来调用接口,好处是隐藏了对用户隐藏了如何创建对象的细节,直接用工厂创建完事了,比如支付宝类要扩展支付种类,添加花呗支付

class AliPay(payment):
	def __init__(self, use_huabie = False):
		self.use_huabei = use_huabie

	def pay(self,money):
		if not self.use_huabei:
			print "支付宝支付%d" % money
		else:
			print "支付宝花呗支付%d" % money #添加花呗支付

而相对应的工厂类就扩展为

class PaymentFactoryClass(object):
	def create_payment_obj(self, pay_kind):
		if pay_kind == "alipay":
			return AliPay()
		elif pay_kind == "wechat":
			return WeChatPay()
		elif pay_kind == "huabei":
			return AliPay(use_huabie=True) #增加花呗支付
		else:
			#没有这个支付模式
			print "....."

#模拟上层调用逻辑
pf = PaymentFactoryClass()
p = pf.create_payment_obj("huabei")
p.pay(100)

就是说client只用关心传入的支付种类参数就可以了,不用关心Alipay是怎么创建对象的

缺点:

  • 违反单一职责原则,工厂成为一个总接口
  • 添加东西是,修改了工厂类,违反了开闭原则
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值