首先上代码
# Director
class Director(object):
def __init__(self):
self.builder = None
def construct_building(self):
self.builder.new_building()
self.builder.build_brand()
self.builder.build_size()
self.builder.build_ssd()
def get_building(self):
return self.builder.computer_building
# Abstract Builder
class Computer(object):
def __init__(self):
self.computer_building = None
def new_building(self):
self.computer_building = ComputerBuilding()
# Concrete Builder
class Apple(Computer):
def build_brand(self):
self.computer_building.brand = 'Apple'
def build_size(self):
self.computer_building.size = '15寸'
def build_ssd(self):
self.computer_building.ssd = '256G'
class Acer(Computer):
def build_brand(self):
self.computer_building.brand = 'Acer'
def build_size(self):
self.computer_building.size = '17寸'
def build_ssd(self):
self.computer_building.ssd = '512G'
# Product
class ComputerBuilding(object):
def __init__(self):
self.brand = None
self.size = None
self.ssd = None
def __repr__(self):
return 'Brand: %s | Size: %s | Ssd: %s' % (self.brand, self.size, self.ssd)
# Client
if __name__ == "__main__":
# 指挥者
director = Director()
# 新建个苹果建造者
director.builder = Apple()
director.construct_building()
building = director.get_building()
print(building)
# 新建宏基建造者
director.builder = Acer()
director.construct_building()
building = director.get_building()
print(building)
建造这主要有三个类:
1.指挥者
2.建造者
3.建造的东西(抽象出来一个抽象类)
就从例子里面来说:
1.指挥者
2.建造电脑的
3.电脑类(抽象了一个电脑类)
过程:
指挥者负责只会建造者的一系列动作,然后建造者负责电脑的组建有哪些,然后个电脑类开始建造,
电脑类可以扩展更多的功能,比如升级其它的。
在抽象工厂模式中,抽象出了创建方法,使用者只能按照预定好的步骤新创建一个对象。
在建造者模式中,使用者可以按照自己的想法,在合理的范围内定制自己所需要的对象。
所以当有一下情况时候,需要考虑使用建造者模式:
1.对象的创建步骤可以独立于创建过程的时候
2.被创建的对象拥有不同的表现形式