建造者模式
且任容枯 Lv4

建造者模式

将一个复杂对象的构造与他的表示分离,使得同样的构建过程可以创建不同的表示

抽象建造者、具体建造者、指挥者、产品

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()))

# M1,三星,自产,双飞燕
# I9,京东方,华硕,联想