建造者模式设计模式
咱们想要建立一个由多个部分构成的对象,并且它的构成须要一步一步地完成。只有当各个部分都建立好,这个对象才算是完整的。这正是建造者设计模式的用武之地。
建造者模式将一个复杂对象的构造过程与其表现分离,这样同一个构造过程可用于建立不一样的表现。
现实生活中的例子:快餐店使用的就是建造者模式。即便存在不一样的多种汉堡包和包装,准备一个汉堡包及打包的过程是相同的。经典款汉堡包和奶酪汉堡包之间的区别在于表现,而不是建造过程。
指挥者是出纳员,将须要准备什么餐品的指令传达给工做人员,建造者是工做人员中的个体,关注具体顺序。
应用案例:建造者模式和工厂模式的主要区别在于工厂模式以单个步骤建立对象,而建造者模式以多个步骤建立对象,而且几乎始终会使用一个指挥者。
另外一个区别是,在工厂模式下,会当即返回一个建立好的对象;而在建造者模式下,仅在须要时客户端代码才显示地请求指挥者返回最终的对象。
#假设想买一台新电脑,若是决定购置一台也定的预配置的电脑型号,如苹果1.4GHz Mac mini,则是使用工厂模式。 # 全部的规格都已经由制造商预先肯定,制造商不用向你咨询什么就知道本身该作什么,他们一般接收仅仅是单条指令。 #工厂模式 MINI14 = '1.4GHz Mac mini' class AppleFactory: class MacMini14: def __init__(self): self.memory = 4 self.hdd = 500 self.gpu = 'Intel HD Graphics 5000' def __str__(self): info = ("Model:{}".format(MINI14), "Memory:{}GB".format(self.memory), "Hard Disk:{}GB".format(self.hdd), "Graphics Card:{}".format(self.gpu)) return '\n'.join(info) def build_computer(self,model): if model==MINI14: return self.MacMini14() else: print("I don't know how to build {}.".format(model)) # if __name__ == '__main__': # afac = AppleFactory() # mac_mini = afac.build_computer(MINI14) # print(mac_mini) #建立者模式,购买提条定制的电脑,倘若这样使用的则是建造者模式。你是指挥者,向制造商提供指令说明心中理想的电脑规格。 class Computer: def __init__(self,serial_number): self.serial = serial_number self.memory = None self.hdd = None self.gpu = None def __str__(self): info = ("Model:{}".format(MINI14), "Memory:{}GB".format(self.memory), "Hard Disk:{}GB".format(self.hdd), "Graphics Card:{}".format(self.gpu)) return '\n'.join(info) class ComputerBuilder: def __init__(self): self.computer = Computer('AG23385193') def configure_memory(self,amount): self.computer.memory = amount def configure_hdd(self,amount): self.computer.hdd = amount def configure_gpu(self,gpu_model): self.computer.gpu = gpu_model class HardwareEngineer: def __init__(self): self.builder = None def construct_computer(self,memory,hdd,gpu): self.builder = ComputerBuilder() # [step for step in (self.builder.configure_memory(memory), # self.builder.configure_hdd(hdd), # self.builder.configure_gpu(gpu))] self.builder.configure_memory(memory) self.builder.configure_hdd(hdd) self.builder.configure_gpu(gpu) @property def computer(self): return self.builder.computer def main(): engineer = HardwareEngineer() engineer.construct_computer(hdd=500,memory=8,gpu='GeForce GTX 650 Ti') computer = engineer.computer print(computer) if __name__ == '__main__': main()
小结ui
在如下状况下,与工厂模式相比,建造者模式是更好的选择。 1.想要建立一个复杂对象(对象由多个部分构成,且对象的建立要通过多个不一样的步骤,这些步骤也许还需听从特定的顺序); 2.要求一个对象能有不一样的表现,并但愿将对象的构造与表现解耦; 3.想要在某个时间点建立对象,但在稍后的时间点再访问。