个人理解:
建造者模式与策略(stragety)模式比较类似,Director类有点类似于策略类,不同的是建造者模式会对Product分步建造完成。
UML类图

代码实现:
<span style="font-size:12px;"> public class Director
{
public Person BuildPerson(PersonBuilder personBuilder)
{
personBuilder.SetName();
personBuilder.SetAge();
return personBuilder.GetPerson();
}
}
public class TomBuilder : PersonBuilder
{
public override void SetName()
{
this.person.Name = "Tom";
}
public override void SetAge()
{
this.person.Age = 19;
}
}
public class JackBuilder : PersonBuilder
{
public override void SetName()
{
this.person.Name = "Jack";
}
public override void SetAge()
{
this.person.Age = 29;
}
}
public struct Person
{
public string Name { get; set; }
public int Age { get; set; }
}</span>
python实现代码
class Product(object):
ProductA=""
ProductB=""
class Builder(object):
product=Product()
def BuildProductA(self):
raise NotImplementedError("Abstract")
def BuildProductB(self):
raise NotImplementedError("Abstract")
def GetProduct(self):
return self.product
class ChinaBuilder(Builder):
def BuildProductA(self):
self.product.ProductA="A, made in China."
def BuildProductB(self):
self.product.ProductB="B, made in China."
class GermanBuilder(Builder):
def BuildProductA(self):
self.product.ProductA="A, made in German."
def BuildProductB(self):
self.product.ProductB="B, made in German."
'''class Director(object):
__builder=None
def SetBuilder(self, builder):
self.__builder=builder
def Build(self):
self.__builder.BuildProductA()
self.__builder.BuildProductB()
def GetProduct(self):
return self.__builder.GetProduct()
chinaBuilder=ChinaBuilder()
germanBuilder=GermanBuilder()
director=Director()
director.SetBuilder(chinaBuilder)
director.Build()
product=director.GetProduct()
print(product.ProductA)
print(product.ProductB)
director.SetBuilder(germanBuilder)
director.Build()
product=director.GetProduct()
print(product.ProductA)
print(product.ProductB)'''
class Director(object):
__builder=None
def BuildProduct(self, builder):
self.__builder=builder
self.__builder.BuildProductA()
self.__builder.BuildProductB()
return self.__builder.GetProduct()
chinaBuilder=ChinaBuilder()
germanBuilder=GermanBuilder()
director=Director()
product=director.BuildProduct(chinaBuilder)
print(product.ProductA)
print(product.ProductB)
product=director.BuildProduct(germanBuilder)
print(product.ProductA)
print(product.ProductB)
本文深入探讨了建造者模式的基本概念及其实现方式,并通过具体的代码示例对比了不同类型的建造者实现,帮助读者理解该模式如何应用于软件设计。
591

被折叠的 条评论
为什么被折叠?



