python设计模式(二):建造者模式

什么时候用到:

如果我们知道一个对象必须经过多个步骤来创建,并且要求同一个构造过程可以产生不同的表现,这就需要用到建造模式。
该模式中,有两个参与者:建造者和指挥者。建造者负责创建复杂对象的各个组成部分。
指挥者使用一个建造者势力控制建造过的过程

建造者模式和工厂模式的区别:

这两个区别不太明确,主要的区别在于工厂模式以单个步骤创建对象,而建造者模式以多个步骤创建对象,并且几乎始终一个指挥者。
另一个区别:在工厂模式下,会立即返回一个创建好的对象;而在建造者模式下,仅在需要时客户端代码才显式地请求指挥着返回最终对象和网页。

建造者实例1:

$cat builder.py 
#encoding:utf8
class Computer(object):
    def __init__(self,serial_number):
        self.serial = serial_number
        self.memory = serial_number
        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(object):
    def __init__(self):
        self.computer = Computer("AG23385193")
    def configure_memory(self,memory):
        self.computer.memory = memory
    def configure_hdd(self,hdd):
        self.computer.hdd = hdd
    def configure_gpu(self,gpu):
        self.computer.gpu = gpu


class HardwareEngineer(object):
    def __init__(self):
        self.builder = None

    def construct_computer(self,memory,hdd,gpu):
        self.builder = ComputerBuilder()
        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(8,500,"GeFore GTX 650 Ti")
    computer = engineer.computer
    print computer
if __name__ == "__main__":
    main()
$python builder.py 
Memory:8GB
Hard Disk:500GB
Graphics Card:GeFore GTX 650 Ti

引入一个建造者 ComputerBuilder 、一个指挥者HardwareEngineer以及一步接一步装配一台电脑的过程。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值