1.什么是工厂模式(Factory)
解决对象的创建问题(对象创建的一个工厂)
解耦对象的创建和使用
包括工厂方法和抽象工厂
工厂模式会返回一个实例
# 一个工厂方法的例子
class DogToy: # 狗玩具类
def speak(self):
print("wang wang")
class CatToy: # 猫玩具类
def speak(self):
print("miao miao")
# 定义工厂方法,传入一个类型
def toy_factory(toy_type):
if toy_type == 'dog': # 类型是dog返回DogToy狗玩具实例
return DogToy()
elif toy_type == 'cat': # 类型是cat返回CatToy狗玩具实例
return CatToy()
2.什么是构建者模式(Builder)
用来控制复杂对象的构造,分步骤每一步创建单独的组件
创建和表示分离。比如你要买电脑,工厂模式直接给你需要的电脑
但是构造模式允许你自定义电脑的配置,组装完成后给你
# 一个构造模式的例子
class Computer:
def __init__(self, serial_number):
self.serial = serial_number
self.memory = None # in gigabytes
self.hdd = None # in gigabytes
self.gpu = None
def __str__(self):
info = ('Memory: {}GB'.format(self.memory),
'Hard Disk: {}GB'.format(self.hdd),
'Graphics Card: {}'.format(self.gpu))
return '\n'.join(info)
class ComputerBuilder:
def __init__(self):
self.computer = Computer('AG23385193') # 初始化Computer对象
def configure_memory(self, amount): # 配置内存
self.computer.memory = amount
def configure_hdd(self, amount):
self.computer.hdd = amount
def configure_gpu(self, gpu_model): # 配置GPU
self.computer.gpu = gpu_model
class HardwareEngineer: # 硬件组装的工程师
def __init__(self):
self.builder = None
def construct_computer(self, memory, hdd, gpu): # 组装电脑,给内存硬件等
self.builder = ComputerBuilder()
[step for step in (self.builder.configure_memory(memory),
self.builder.configure_hdd(hdd),
self.builder.configure_gpu(gpu))]
@property
def computer(self):
return self.builder.computer # 返回构造的电脑
# 使用builder,可以创建多个builder类实现不同的组装方式
engineer = HardwareEngineer()
engineer.construct_computer(hdd=500, memory=8, gpu='GeForce GTX 650 Ti')
print(engineer.computer)
输出结果:
Memory: 8GB
Hard Disk: 500GB
Graphics Card: GeForce GTX 650 Ti