建造者模式
将一个复杂对象的构造与他的表示分离,使得同样的构建过程可以创建不同的表示
抽象建造者、具体建造者、指挥者、产品
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
| from abc import ABCMeta, abstractmethod
class Computer: def __init__(self): self.monitor = None self.cpu = None self.keyboard = None self.chassis = None def __str__(self): return f"{self.cpu},{self.monitor},{self.chassis},{self.keyboard}"
class ComputerBuilder(metaclass=ABCMeta): @abstractmethod def build_monitor(self): pass
@abstractmethod def build_cpu(self): pass
@abstractmethod def build_keyboard(self): pass
@abstractmethod def build_chassis(self): pass
class HuaWeiComputer(ComputerBuilder): def __init__(self): self.computer = Computer()
def build_cpu(self): self.computer.cpu = "I9"
def build_monitor(self): self.computer.monitor = "京东方"
def build_chassis(self): self.computer.chassis = "华硕"
def build_keyboard(self): self.computer.keyboard = "联想"
class AppleComputer(ComputerBuilder): def __init__(self): self.computer = Computer()
def build_cpu(self): self.computer.cpu = "M1"
def build_monitor(self): self.computer.monitor = "三星"
def build_chassis(self): self.computer.chassis = "自产"
def build_keyboard(self): self.computer.keyboard = "双飞燕"
class ComputerDirector: def build_computer(self, builder): builder.build_cpu() builder.build_chassis() builder.build_monitor() builder.build_keyboard() return builder.computer
if __name__ == "__main__": builder = AppleComputer() computer_director = ComputerDirector() print(computer_director.build_computer(builder)) print(computer_director.build_computer(HuaWeiComputer()))
|