class PersonBuilder:
graphics = None
pen = None
def __init__(self, graphics, pen):
self.graphics = graphics
self.pen = pen
def BuildHead(self):
pass
def BuildBody(self):
pass
def BuildArmLeft(self):
pass
def BuildArmRight(self):
pass
def BuildLegLeft(self):
pass
def BuildLegRight(self):
pass
class PersonThinBuilder(PersonBuilder):
def __init__(self, graphics, pen):
PersonBuilder.__init__(graphics, pen)
def BuildHead(self):
self.graphics.DrawEllipse(self.pen, 50, 20, 30, 30)
def BuildBody(self):
self.graphics.DrawEllipse(self.pen, 60, 50, 10, 50)
def BuildArmLeft(self):
self.graphics.DrawEllipse(self.pen, 60, 50, 40, 100)
def BuildArmRight(self):
self.graphics.DrawEllipse(self.pen, 70, 50, 90, 100)
def BuildLegLeft(self):
self.graphics.DrawEllipse(self.pen, 60, 100, 45, 150)
def BuildLegRight(self):
self.graphics.DrawEllipse(self.pen, 70, 100, 85, 150)
class PersonDirector:
def __init__(self, pb):
self.pb = pb
def CreatePerson(self):
self.pb.BuildHead()
self.pb.BuildBody()
self.pb.BuildArmLeft()
self.pb.BuildArmRight()
self.pb.BuildLegLeft()
self.pb.BuildLegRight()
if __name__ == "__main__":
p = Pen(Color.Yellow)
ptb = PersonThinBuilder(pictureBox1.CreateGraphics(), p)
pdThin = PersonDirector(ptb)
pdThin.CreatePerson()
pfb = PersonFatBuilder(pictureBox1.CreateGraphics(), p)
pdFat = PersonDirector(pfb)
pdFat.CreatePerson()
创造者模式基本代码
Product类---产品类,由多个部件组成
class Product:
parts = []
def Add(self, part):
self.parts.append(part)
def Show(self):
print “Product buildup————”
for elem in self.parts:
print elem
Builder类----抽象建造者
class Builder:
def BuildParterA(self):
pass
def BuildParterB(self):
pass
def GetResult(self):
pass
ConcreteBuilder1类--具体建造者类
class ConcreteBuilder1(Builder):
p = Product()
def BuildPartA(self):
self.p.Add("Part A")
def BuildPartB(self):
self.p.Add("Part B")
def GetResult(self):
return self.p
class ConcreteBuilder2(Builder):
p = Product()
def BuildPartA(self):
p.Add("Part X")
def BuildPartB(self):
p.Add("Part Y")
def GetResult(self):
return p
class Director:
def Construct(self, builder):
builder.BuildPartA()
builder.BuildPartB()
if __name__ == "__main__":
diretor = Director()
b1 = ConcreteBuilder1()
b2 = ConcreteBuilder2()
director.Construct(b1)
p1 = b1.GetResult()
p1.Show()
director.Construct(b2)
p2 = b2.GetResult()
p2.Show()
建造者模式是在当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时适用的模式。