设计模式——工厂设计模式和单例模式(多看多想)

  • 工厂设计模式:不直接向客户端暴露对象创建实现的细节,而是通过工厂类来负责创建产品类的实例。
class CarFactory:
	def creat_car(self,brand):
		if brand=="宝马":
			return BMW()
		elif brand=="奔驰":
			return Benz()
		elif brand=="比亚迪":
			return BYD()
		else:
			return "未知品牌,不予制造"
class BMW:
	pass
class Benz:
	pass
class BYD:
	pass

c1=CarFactory()
print(c1.creat_car('宝马'))
c2=CarFactory()
print(c2.creat_car('奥迪'))

运行结果:
<class ‘main.BMW’>
未知品牌,不予制造

  • 单例模式:有且仅有一个类
class CarFactory:
	__obj=None    #通用
	__init_flag = True  #通用
	def creat_car(self,brand):
		if brand=="宝马":
			return BMW()
		elif brand=="奔驰":
			return Benz()
		elif brand=="比亚迪":
			return BYD()
		else:
			return "未知品牌,不予制造"
	def __new__(cls, *args, **kwargs):    #通用
		if cls.__obj==None:
			cls.__obj=object.__new__(cls)
		return cls.__obj
	def __init__(self):          #通用,只需要将类名修改一下即可
		if CarFactory.__init_flag:
			print('_____init_______')
			CarFactory.__init_flag=False
class BMW:
	pass
class Benz:
	pass
class BYD:
	pass
f1=CarFactory()
f2=CarFactory()
print(f1)
print(f2)

运行结果:
init__ #只执行了一次
<main.CarFactory object at 0x0000026475E21A30>
<main.CarFactory object at 0x0000026475E21A30> #相同

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值