Post

设计模式系列-建造者模式

建造者模式的使用场景: 当一个类的构造函数参数个数超过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.