23种设计模式之建造者模式

简介: 23种设计模式之建造者模式

1 / 写在前面的话 /


    首先,我先举几个生活的场景来描述一下建造者模式。比如一个手机,它是有许多复杂的零件组成,当我们组装这些零件的时候是不是会有一个步骤问题?在实际的开发中,我们所需要的对象构建时,也是非常的复杂,有很多的步骤需要我们去处理。

   

我们再来说说建造模式的本质:


    – 分离了对象子组件的单独构造(由Builder来负责)和装配(由Director负责)。 从而可以构造出复杂的对象。这个模式适用于:某个对象的构建过程复杂的情况下使用。


    – 由于实现了构建和装配的解耦。不同的构建器,相同的装配,也可以做出不同的对象;相同的构建器,不同的装配顺序也可以做出不同的对象。也就是实现了构建算法、装配算法的解耦,实现了更好的复用。


2 /建造者模式/


  1. 首先我们来模拟一台车辆的建造,我就拿车的引擎和轮胎来说说吧!我们先创建三个类分别是Car , Engine, Tyre 。为了防止创建太多的文件,我就直接写在一个java文件中。


package com.kuls.builder;
public class Car {
   private Tyre tyre;
   private Engine engine;
     public void lanch(){
         System.out.println("出发!!!");
     }
    public Tyre getTyre() {
        return tyre;
    }
    public void setTyre(Tyre tyre) {
        this.tyre = tyre;
    }
    public Engine getEngine() {
        return engine;
    }
    public void setEngine(Engine engine) {
        this.engine = engine;
    }
}
/***
 * 轮胎
 */
class Tyre{
    public Tyre() {
    }
    public Tyre(String name) {
        this.name = name;
    }
    private String name;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}
/***
 * 引擎
 */
class Engine{
    public Engine(String name) {
        this.name = name;
    }
    private String name;
    public Engine() {
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}


可以看到我们在Car类中定义了Engine和Tyre类,并且提供了set,get方法,我们还写了一个lanch方法。这里的get/set方法是为了得到Car对象中的Engine,Tyre。


2.因为我们要将创建车和组装车两个步骤分开,我们可以分别定义创建车和组装车的接口来实现


public interface CarBuilder {
    Engine builderEngine();
    Tyre builderTyre();
}



public interface CarDirector {
    Car directorCar();
}


在CarBuilder接口中我们定义了创建引擎,创建轮胎两个方法接口,在CarDirector中定义了一个组装车的接口并且返回值是一个Car对象


我们的物品(轮胎,引擎)和创建者,组装者都已经弄好了,现在就可以来组装一台属于我们的车了,我把这台车命名为ITCar。


3.首先来写一下 ITCarBuilder


public class ITCarBuilder implements CarBuilder{
    @Override
    public Engine builderEngine() {
        return new Engine("IT资源君版引擎");
    }
    @Override
    public Tyre builderTyre() {
        return new Tyre("IT资源君版轮胎");
    }
}


可以看到我们是继承了CarBuilder的接口,这就是我们为啥要去写CarBuilder接口。然后我们重写接口中的方法,此时就可以自定义我们的引擎和轮胎了


4.轮胎和引擎创建好后,然后就是来组装一下我们的车了


public class ITCarDirector implements CarDirector {
    private ITCarBuilder itCarBuilder;
    public ITCarDirector(ITCarBuilder itCarBuilder) {
        this.itCarBuilder = itCarBuilder;
    }
    @Override
    public Car directorCar() {
       Engine e = itCarBuilder.builderEngine();
       Tyre t =itCarBuilder.builderTyre();
       Car car = new Car();
       car.setEngine(e);
       car.setTyre(t);
        return car;
    }
}


我们首先创建一个带参构造器,参数是一个ITCarBuilder对象,传入这个参数就是要把创建好的引擎和轮胎传入组装间进行组装。在directorCar方法中,我们通过itCarBuilder对象来创建引擎和轮胎,然后创建一个Car对象,并把创建好的引擎和轮胎安装在这辆车中,然后把这辆车返回。


5.万事俱备,只欠调用了


public class Test {
    public static void main(String[] args){
      ITCarDirector itCarDirector = new ITCarDirector(new ITCarBuilder());
      Car car = itCarDirector.directorCar();
        System.out.println(car.getEngine().getName());
        System.out.println(car.getTyre().getName());
        car.lanch();
    }
}


运行结果:

IT资源君版引擎

IT资源君版轮胎

出发!!!


可以看到我们将建造者和组装者分离之后创建出的IT版Car


3 / end /


在我们实际开发中,其实碰到了许多的建造者模式,比如:

– StringBuilder类的append方法

– SQL中的PreparedStatement

– JDOM中,DomBuilder、SAXBuild


若有错误,请在后台留言!

相关文章
|
7月前
|
【设计模式系列笔记】建造者模式
建造者模式是一种创建型设计模式,用于将复杂对象的构建与其表示分离,使构建过程可定制。关键元素包括产品类(定义要构建的对象)、建造者接口(定义构建方法)、具体建造者类(实现构建过程)和指导者类(负责构建过程)。通过建造者模式,客户端可以灵活地创建具有不同表示的复杂对象,提高代码的可读性和可维护性,尤其适用于构建过程复杂且包含多个可选部分的情况。
138 1
构建未来应用:Java设计模式 - 建造者模式(Builder)在现代编程中的应用
【4月更文挑战第7天】建造者模式是提升代码质量的关键,尤其在复杂环境中。它分步骤构建对象,将构建与表示分离,适用于UI构建、数据模型组装、配置文件解析和网络请求构造等场景。最佳实践包括明确构建步骤、提供默认值、支持链式调用和确保线程安全。然而,过多步骤、不一致状态和性能问题是使用时需注意的问题。掌握建造者模式对于现代编程至关重要。
90 3
设计模式--建造者模式 builder
这篇文章通过一个电脑购买的例子,详细解释了建造者模式的四个角色(产品类、抽象构建者、实体构建类和指导者类),并提供了相应的代码实现,阐述了建造者模式在设计复杂对象时的应用和优势。
设计模式--建造者模式 builder
Java设计模式:建造者模式详解
建造者模式是一种创建型设计模式,通过将复杂对象的构建过程与表示分离,使得相同的构建过程可以创建不同的表示。本文详细介绍了建造者模式的原理、背景、应用场景及实际Demo,帮助读者更好地理解和应用这一模式。
Java设计模式-建造者模式(6)
Java设计模式-建造者模式(6)
【四】设计模式~~~创建型模式~~~建造者模式(Java)
文章详细介绍了建造者模式(Builder Pattern),这是一种创建型设计模式,用于将复杂对象的构建与其表示分离,允许分步骤创建一个复杂的对象而无需指定其内部的具体构造细节。通过定义抽象建造者、具体建造者、指挥者和产品角色,建造者模式允许通过相同的构建过程创建不同的产品表示,提高了系统的灵活性和扩展性。
建造者模式-大话设计模式
建造者模式-大话设计模式
大话设计模式(3)——造物者一般的建造者模式
大话设计模式(3)——造物者一般的建造者模式
44 1
大话设计模式(3)——造物者一般的建造者模式
js设计模式【详解】—— 建造者模式
js设计模式【详解】—— 建造者模式
58 0
设计模式-05建造者模式(Builder Pattern)
设计模式-05建造者模式(Builder Pattern)
AI助理

阿里云 AI 助理已上线!

快来体验一下吧。