'''
测试工厂模式和单例模式的整合使用
'''
class CarFactory:
__obj = None # 类属性, 创建的对象用它保存起来
__init_flag = True
def __new__(cls, *args, **kwargs): # 重写new方法,保证对象只有一个
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
def create_car(self, brand):
if brand == "奔驰":
return Benz()
elif brand == "宝马":
return BMW()
elif brand == "比亚迪":
return BYD()
else:
return "未知品牌,无法创建"
class Benz:
pass
class BMW:
pass
class BYD:
pass
factory = CarFactory()
c1 = factory.create_car("奔驰") # 需要一个奔驰类,我们直接创建一个奔驰了对象就可以
c2 = factory.create_car("比亚迪")
print(c1)
print(c2)
factory2 = CarFactory()
print(factory) #工厂模式单例化,和factory2是同一个对象
print(factory2)
输出:
D:\wwwroot\pyiteam\venv\Scripts\python.exe D:\wwwroot\pyiteam\mypro_obj\mypy01.py
init.....
<__main__.Benz object at 0x02F2C388>
<__main__.BYD object at 0x02F2C400>
<__main__.CarFactory object at 0x02F2C3A0>
<__main__.CarFactory object at 0x02F2C3A0>
Process finished with exit code 0