建造者模式(Builder)

本文深入探讨了建造者模式的基本概念及其实现方式,并通过具体的代码示例对比了不同类型的建造者实现,帮助读者理解该模式如何应用于软件设计。

个人理解:

建造者模式与策略(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)


 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值