建造者模式-Builder

名称:

    建造者模式(Builder Pattern)-对象创建型模式

 

问题:

    Separate the construction of a complex object from its representation so that the same construction process can create different representations.

将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

 

适用性:

    -当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。

    -当构造过程必须允许被构造的对象有不同的表示时。

 

协作:

    -客户创建Director对象,并用它所想要的Builder对象进行配置。

    -一旦产品部件被生成,导向图就会通知生成器。

    -生成器处理导向器的请求,并将部件添加到该产品中。

    -客户从生成器中检索产品。

 

优点和缺点:

    1、它使你可以改变一个产品的内部表示。

         Builder对象提供给导向器一个构造产品的抽象接口。该接口使得生成器可以隐藏这个产品的表示和内部结构。它同时也隐藏了该产品是如何装配的。因为产品是通过抽象接口构造的,你在改变该产品的内部表示时所要做的只是定义一个新的生成器。

    2、它将构造代码和表示代码分开。 

        Build模式通过封装一个复杂对象的创建和表示方式提高了对象的模块性。客户不需要知道定义产品内部结构的类的所有信息;这些类是不出现在Builder接口中的。每个ConcreteBuilder包含了创建和装配一个特定产品的所有代码。这些代码只需写一次;然后不同的Director可以复用它以在相同部件集合的基础上构作不同的Product。

    3、它使你可对构造过程可以进行更精细的控制。

        Builder模式于一下子就生成产品的创建型模式不同,它是在导向者的控制下一步一步构造产品的。仅当该产品完成时导向者才从生成器中取回它。因此Builder接口相比其他创建型模式能更好的反映产品的构造过程。这使你可以更精细的控制构建过程,从而能更精细的控制所得产品的内部结构。

 

解决方案:

    

1、 模式的参与者

    1、Builder

    -为创建一个Product对象的各个部件指定抽象接口。

    2、ConcreteBuilder

    -实现Builder的接口以构造和装配该产品的各个部件。

    -定义并明确他所创建的表示。

   -提供一个检索产品的接口。

    3、Director

    -构造一个使用Builder接口的对象。

    4、Product

    -表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程。

    -包含定义组成部件的类,包括将这些部件装配成最终产品的接口。

2.实现方式

复制代码
abstract class Builder
{

    protected Product product=new Product();
    public abstract void buildPartA();
    public abstract void buildPartB();
    public abstract void buildPartC();
    public Product getProduct()
    {
        return product;
    }
}
复制代码
复制代码
public class ConcreteBuilder extends Builder
{
    public void buildPartA()
    {
        product.setPartA("set PartA");
    }
    public void buildPartB()
    {
        product.setPartB("set PartB");
    }
    public void buildPartC()
    {
        product.setPartC("set PartC");
    }
}
复制代码
复制代码
class Director
{
    private Builder builder;
    public Director(Builder builder)
    {
        this.builder=builder;
    }
    public Product construct()
    {
        builder.buildPartA();
        builder.buildPartB();
        builder.buildPartC();
        return builder.getProduct();
    }
}
复制代码
复制代码
class Product
{
    private String partA;
    private String partB;
    private String partC;
    public void setPartA(String partA)
    {
        this.partA=partA;
    }
    public void setPartB(String partB)
    {
        this.partB=partB;
    }
    public void setPartC(String partC)
    {
        this.partC=partC;
    }
    public void show()
    {
       
    }
}
复制代码

 

复制代码
public class Client
{
    public static void main(String[] args)
    {
        Builder builder=new ConcreteBuilder();
        Director director=new Director(builder);
        Product product=director.construct();
        product.show();
    }
}
复制代码

 

Builder模式着重于一步步构造一个复杂对象。通常情况下,由具体生成器生成的产品,它们的表示相差很大,以至于给不同的产品以公共父类没有太大的意义。

 

参考资料

《设计模式:可复用面向对象软件的基础》

 

posted @   diameter  阅读(118)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示