建造者模式(Build Pattern)

1 快餐点餐系统


In [1]:
class Burger():
    name=""
    price=0.0
    def getPrice(self):
        return self.price
    def setPrice(self,price):
        self.price=price
    def getName(self):
        return self.name
class cheeseBurger(Burger):
    def __init__(self):
        self.name="cheese burger"
        self.price=10.0
class spicyChickenBurger(Burger):
    def __init__(self):
        self.name="spicy chicken burger"
        self.price=15.0
class Snack():
    name = ""
    price = 0.0
    type = "SNACK"
    def getPrice(self):
        return self.price
    def setPrice(self, price):
        self.price = price
    def getName(self):
        return self.name


class chips(Snack):
    def __init__(self):
        self.name = "chips"
        self.price = 6.0


class chickenWings(Snack):
    def __init__(self):
        self.name = "chicken wings"
        self.price = 12.0
class Beverage():
    name = ""
    price = 0.0
    type = "BEVERAGE"
    def getPrice(self):
        return self.price
    def setPrice(self, price):
        self.price = price
    def getName(self):
        return self.name


class coke(Beverage):
    def __init__(self):
        self.name = "coke"
        self.price = 4.0


class milk(Beverage):
    def __init__(self):
        self.name = "milk"
        self.price = 5.0

In [2]:
class Order(object):
    burger=''
    snack=''
    beverage=''
    def __init__(self,orderBuilder):
        self.burger=orderBuilder.bBurger
        self.snack=orderBuilder.bSnack
        self.beverage=orderBuilder.bBeverage
    def show(self):
        print('Burger: %s' %self.burger.getName())
        print('Snack: %s' % self.snack.getName())
        print('Beverage: %s' % self.beverage.getName())

In [6]:
class orderBuilder():
    bBurger=""
    bSnack=""
    bBeverage=""
    def addBurger(self,xBurger):
        self.bBurger=xBurger
        return self
    def addSnack(self,xSnack):
        self.bSnack=xSnack
        return self
    def addBeverage(self,xBeverage):
        self.bBeverage=xBeverage
        return self
    def build(self):
        return Order(self)

In [7]:
order_1=orderBuilder().addBurger(spicyChickenBurger()).addSnack(chips()).addBeverage(milk()).build()
order_1.show()


Burger: spicy chicken burger
Snack: chips
Beverage: milk

2 说明

将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 建造者模式的作用,就是将“构建”和“表示”分离,以达到解耦的作用。

3 Advantage

  • 封装性好
  • 系统扩展容易
  • 模式易使用
  • 便于细节控制

4 Disvantage

  • 加工工艺不透明