- 工厂设计模式:不直接向客户端暴露对象创建实现的细节,而是通过工厂类来负责创建产品类的实例。
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> #相同