设计模式系列-建造者模式
建造者模式的使用场景: 当一个类的构造函数参数个数超过4个,而且这些参数有些是可选的参数时,由于构造函数的重载、参数列表的过长,会导致使用这个类进行实例化的时候容易错误传递参数值。 直接看一段代码实例:
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
class Pizza:
def __init__(self, builder):
self.garlic = builder.garlic
self.extra_cheese = builder.extra_cheese
def __str__(self):
garlic = 'yes' if self.garlic else 'no'
cheese = 'yes' if self.extra_cheese else 'no'
info = ('Garlic: {}'.format(garlic), 'Extra cheese: {}'.format(cheese))
return '\n'.join(info)
class PizzaBuilder:
def __init__(self):
self.extra_cheese = False
self.garlic = False
def add_garlic(self):
self.garlic = True
return self
def add_extra_cheese(self):
self.extra_cheese = True
return self
def build(self):
return Pizza(self)
if __name__ == '__main__':
pizza = Pizza.PizzaBuilder().add_garlic().add_extra_cheese().build()
print(pizza)
这个实例中我们需要生产一个Pizza,Pizza有很多可能的配料,如garlic、cheese,通过一个内置类PizzaBuilder来完成Pizza的构建。这里建造者的每一个为其添加了属性的方法之后,都进行了return self的操作,得以实现链式的调用。
This post is licensed under CC BY 4.0 by the author.