当前位置: 首页 > 后端技术 > Python

Python3实现建造者模式

时间:2023-03-26 00:35:17 Python

builderpattern建造者模式用于创建复杂的对象。使用建造者模式可以让复杂的流程层次清晰明了,解耦对象的创建和使用。其实从代码的角度来说,进行了多重封装,让代码结构更加规范合理,层次结构更加分明。在一个复杂的对象中,需要编写大量的代码来实现这个类,并且在初始化的时候可能会有很多的参数需要初始化。构建器模式将类的实现拆分为多个创建步骤。这些步骤在大多数相关材料中通常以拟人化的形式表示;比如builder、conductor、directors,但是这些名词的拟人化并不能完全让读者得到完整的意思。下面将详细说明这些角色需要做什么。这篇文章是关于水文学的,我就以盖房子为例来说明一下。首先我们创建一个房子的基类来模拟房子:classHouse:#Housebaseclassdef__init__(self):self.size=0self.floor=0self.garage=0self.courtyard=0def__str__(self):houseInfo='我家有'+str(self.size)+'平方米,'+str(self.floor)+'楼层数,'+str(self.garage)+'车库'+str(self.courtyard)+'ayard'returnhouseInfo其中size,floor,garage,courtyard用于记录房屋的信息,方便工人们在建房时作为记录。接下来,我们构建一个工人类来建造我们的房子:classHouseBuilder:#builderworkerdef__init__(self):self.house=House()defbuildGarage(self,amount):self.house。车库=数量打印(self.house)defbuildFloor(self,amount):self.house.floor=数量打印(self.house)defbuildSize(self,amount):self.house.size=数量打印(self.house)defbuildCourtyard(self,amount):self.house.courtyard=amountprint(self.house)定义建筑尺寸、车库数量、房屋楼层和庭院数量,以及所有传入一个参数来设置这个信息。有工人之后,还有另一个承包商。承包商更善于协调施工,也是与用户的纽带。工头类:#Foremandef__init__(self):self.builder=HouseBuilder()defbuild(self,size,floor,garage,courtyard):#Buildstepsself.builder.buildSize(size)self.builder.buildFloor(floor)self.builder.buildGarage(garage)self.builder.buildCourtyard(courtyard)在contractor的初始化函数中,创建一个worker类,即房屋的建造者,然后定义一个build方法进行建造。先确定面积大小,再建房(楼),再建车库和庭院。至此,一个简单的建造者模型就完成了。为了更好地解释,我创建了一个新的User类。这个User类不需要了解它的具体完成。它只需要与承包商联系。这个时候,告诉承包者我的土地面积,房子的大小和一些参数后,承包者告诉他的弟弟,这时候就可以开始施工了,用户不需要了解施工过程.代码如下:classUser():#Userdef__init__(self,size,floor,garage,courtyard):self.frm=Foreman()self.frm.build(size,floor,garage,courtyard)完成代码如下:classHouse:#Housebaseclassdef__init__(self):self.size=0self.floor=0self.garage=0self.courtyard=0def__str__(self):houseInfo='我家有'+str(self.size)+'squaremeter,'+str(self.floor)+'floor,'+str(self.garage)+'garages'+str(self.courtyard)+'yards'returnhouseInfoclassHouseBuilder:#Builderworkersdef__init__(self):self.house=House()defbuildGarage(self,amount):self.house.garage=amount打印(self.house)defbuildFloor(self,amount):self.房子.floor=金额打印(self.house)defbuildSize(self,金额):self.house.size=金额打印(self.house)defbuildCourtyard(self,金额):self.house.courtyard=金额打印(self.house)classForeman:#Foremandef__init__(self):self.builder=HouseBuilder()defbuild(self,size,floor,garage,courtyard):#构建步骤self.builder.buildSize(size)self.builder.buildFloor(floor)self.builder.buildGarage(garage)self.builder.buildCourtyard(courtyard)classUser():#Userdef__init__(self,size,floor,garage,courtyard):self.frm=Foreman()self.frm.build(size,floor,garage,courtyard)xiaoming=User(500,3,2,1)运行结果如下:设计模式有一定的局限性,具体使用场景需要具体分析