此问题来自高淇老师python400集讲义课后习题
问题描述:
使用工厂模式、单例模式实现如下需求:
(1) 电脑工厂类 ComputerFactory 用于生产电脑 Computer。工厂类使用单例模式,
也就是说只能有一个工厂对象。
(2) 工厂类中可以生产各种品牌的电脑:联想、华硕、神舟
(3) 各种品牌的电脑使用继承实现:
(4) 父类是 Computer 类,定义了 calculate 方法
(5) 各品牌电脑类需要重写父类的 calculate 方法
代码:
# 测试工厂模式和单例模式的整合使用
class ComputerFactory:
__obj = None # 类属性
__init_flag = True
def create_computer(self, brand):
if brand == "联想":
return LENOVO()
elif brand == "华硕":
return ASUS()
elif brand == "神州":
return Hasee()
else:
return "未知品牌,无法创建"
def __new__(cls, *args, **kwargs):
if cls.__obj == None:
cls.__obj = object.__new__(cls)
return cls.__obj
def __init__(self):
if ComputerFactory.__init_flag:
print("init ComputerFactory....")
ComputerFactory.__init_flag = False
class Computer:
def caculate(self):
print("caculate:", self)
print("该电脑可以用于计算...")
class LENOVO(Computer):
def caculate(self):
super().caculate() # 通过super调用父类的方法
class ASUS(Computer):
def caculate(self):
super().caculate() # 通过super调用父类的方法
class Hasee(Computer):
def caculate(self):
super().caculate() # 通过super调用父类的方法
factory = ComputerFactory()
c1 = factory.create_computer("联想")
c2 = factory.create_computer("华硕")
c3 = factory.create_computer("神州")
print(c1)
print(c2)
print(c3) # 区分三个品牌对象存储位置不同
factory2 = ComputerFactory()
factory3 = ComputerFactory()
print(factory)
print(factory2)
print(factory3) # 测试三个电脑品牌是否用的是同一个工厂
l = LENOVO()
l.caculate()
a = ASUS()
a.caculate()
h = Hasee()
h.caculate() # 继承父类comouter的caculate功能
程序结果:
程序还有需要完善的地方,欢迎小伙伴们探讨!