精妙构思:深度探析构建者模式的设计之道

发布时间 2024-01-03 00:49:40作者: 程序视点

大家好,欢迎来到程序视点!今天,我们一起来分享下一个创建型模式:构建者模式

定义

先来看下它的定义。

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

小二哥就问大家,看到这个定义懵逼不懵逼?什么叫对象的构建和它的表示分离?如果你能解释清楚这个问题,那这篇文章后面的内容可以忽略了。

构建者模式简介

我们一起来理解下对象的构建和它的表示分离。先分开来看,一个是对象的构建,另一个是对象的表示对象的表示,可能不太好理解。让我们换一种问法:怎么表示一个对象? 这个问题大家回答起来是不是就很轻松了?最简单的说法就是:new个东西出来表示对象对象的构建,就是我们在构建者模式把对象从无变为有的过程。也就是说”构建的最终结果“就是一个对象。结合起来的意思就是:构建一个对象的过程和该对象最终展示出来要分开来看看构建者模式包含的角色:既然是构建者构建对象,那这里面必然包含构建者类和对象类(又可以称为产品类)。我们提倡面向接口编程,那构建者也就有对应的抽象类(抽象构建者)和实现类(具体构建者)。还有一个角色是指导者。它调用具体构建者来创建复杂对象。_ps:指导者中不涉及具体产品的信息,只负责保证对象各部分完整创建或按某种顺序创建。_一起来看下面的例子。

示例

抽象构建者

public interface ICarBuilder {  
    public void buildWheel();  
    public void buildSkeleton();  
    public void buildEngine();  
  
    Car buildCar();  
}  

具体构建者

public class ConcreteBuilder implements ICarBuilder  
{  
    Car car;  
  
    public ConcreteBuilder()  
    {  
        car = new Car();  
    }  
  
    @Override  
    public void buildWheel()  
    {  
        car.setWheel("轮子");  
    }  
  
    @Override  
    public void buildSkeleton()  
    {  
        car.setSkeleton("车身结构");  
    }  
  
    @Override  
    public void buildEngine()  
    {  
        car.setEngine("发动机");  
    }  
  
    @Override  
    public Car buildCar()  
    {  
        return this.car;  
    }  
  
}  

产品类

public class Car {  
    private String wheel;  
    private String skeleton;  
    private String engine;  
      
    ...setter & getter  
}  

指导者

    public Car constructCar(ICarBuilder builder) {  
        builder.buildEngine();  
        builder.buildSkeleton();  
        builder.buildWheel();  
        return builder.buildCar();  
    }  
}  

好了,测试下:

    public static void main(String[] args)  
    {  
        CarDirector director = new CarDirector();  
        Car car = director.constructCar(new ConcreteBuilder());  
        System.out.println(car.getWheel());  
        System.out.println(car.getEngine());  
        System.out.println(car.getSkeleton());  
    }  
}  

输出:轮子车身结构发动机我们最终的得到的Car对象并不是我们自己new出来的,而是ConcreteBuilder这个构建者内部去new的。并且,关于Car对象具体的构建细节我们也不用知道,只需要让ConcreteBuilder这个构建者去buildEngine(),buildSkeleton(),buildWheel()就好。至于内部是只调用的setter方法,还是其他内容,我们都不用 care。

构建者模式总结

从上面的例子我们可以看出,构建者模式是把建造对象的过程分成一部分一部分来完成的。它主要是为了将构建复杂对象的过程和它的部件解耦,使得我们不用去关心每个部件是如何组装的,但最终我们能获取到这个对象。好了,构建者模式就讲到这里了。给大家留个小问题:_我们日常工作中碰见过哪些使用构建者模式的情况呢?_期待大家的反馈哦!

One more thing

欢迎关注程序视点,这里会不定时分享一些技术要点,更有一些深受资源收藏爱好者会喜欢的优质学习资料。吃瓜、摸鱼、白嫖技术就等你了~

如果该文章对你有帮助,那么就多多支持一下,给一个小小的鼓励吧!