创建型模式--建造者模式

 

當欲创建一个由多个部分組成的对象,而且它的构成需要依序完成,此時使用建造者(Builder)模式正是最佳的解決方案,利用此模式可将一个复杂对象的构造过程与其表现完全分离,且同一个构造过程可以产生多个不同的表现,这种需求存在于许多应用開發中,如HTML页面生成器、文档转换器以及UI表单创建工具等場合。

示例:以建造者模式定制电脑各部份之構建過程

class Computer:       #產品類

    def __init__(self, serial_number):

        self.serial = serial_number

        self.memory = None

        self.hdd = None

        self.gpu = None

 

    def __str__(self):

        info = ('Memory: {}GB'.format(self.memory), 'Hard Disk: {}GB'.format(self.hdd), 'Graphics Card: {}'.format(self.gpu))

        return '\n'.join(info)

 

class ComputerBuilder:            #此是建造者(Builder

    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 ComputerHardware:                 #此是指挥者(Director

    def __init__(self):

        self.builder = None

 

    def construct_computer(self, memory, hdd, gpu):

        self.builder = ComputerBuilder()

        [i for i in (self.builder.configure_memory(memory),                        self.builder.configure_hdd(hdd),                        self.builder.configure_gpu(gpu))]   #此是list comprehension

 

    @property

    def computer(self):

        return self.builder.computer

 

def main():

    hdw =ComputerHardware ()

    hdw.construct_computer(hdd=500, memory=8, gpu='GeForce GTX 650 Ti')

    computer = hdw.computer

    print(computer)

實際業務邏輯之場景如下:

if __name__ == '__main__':

    main()

輸出:

Memory: 8GB

Hard Disk: 500GB

Graphics Card: GeForce GTX 650 Ti

總結:

建造者模式和工厂模式的的区别:
在工厂模式下会立即返回一个创建好的对象;而建造者模式下仅在需要时客户端才显式地请求指挥者向建造者提供心中理想的电脑规格以返回最终对象。在以下几种情况下与工厂模式相比,建造者模式是更好的选择:

  • 想要创建一个由多个部分构成,且对象的创建要经过多个不同的步骤,且这些步骤还可依循特定的顺序。
  • 要求一个对象能有不同的表现,且将对象的构造与表现解耦。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值