03.建造者模式

建造者模式

1. 是什么

百科定义:

将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。

对象的表示就是对象的细节,如具体的属性。建造者模式主要是抽象出构造一个复杂对象的流程,这里的复杂对象的复杂之处在于它是由若干低层的对象所组成,比如汽车对象,由发动机、变速器、底盘等低层次对象构成。建造者模式在这就是把造车这个事情的流程抽象出来,这样同一个流程可以用来造不同的细节(表示)的具体的汽车,从而达到构建和表示分离,构建过程可以复用的作用。

2. 有什么用

抽象出对象构建的流程,使得具体表示能和构建流程分离。作用自然是为了代码解耦和更好地面向变化。

3. 怎么用

  1. 首先要明确,要构建的对象比较复杂,是多个低层次的模块的集成构建,而且这个构建流程是通用的。

  2. 示例代码
    (以建造汽车为例)

  • 产品(车辆)接口
public interface Vehicle {

    public void run();
}

  • 具体产品
public class Benz implements Vehicle {

    @Override
    public void run() {
        System.out.println("奔驰run");

    }

}

  • 建造者接口
public abstract class AbstractVehicleBuilder {
    // 发动机
    public abstract void buildEngine();

    // 变速箱
    public abstract void buildTransmission();

    // 底盘
    public abstract void buildChassis();
    
    //
    public abstract Vehicle getVehicle() ;
    
}
  • 具体建造者
public class BenzBuilder extends AbstractVehicleBuilder {
    Benz benz = new Benz();

    @Override
    public void buildEngine() {
        System.out.println("组装奔驰的engine");

    }

    @Override
    public void buildTransmission() {
        System.out.println("组装奔驰的变速箱");

    }

    @Override
    public void buildChassis() {
        System.out.println("组装奔驰的底盘");

    }

    @Override
    public Vehicle getVehicle() {
        return benz;
    }

}
  • 和client确认需求,指挥建造的领导
public class Director {

    public Vehicle build(AbstractVehicleBuilder builder) {
        builder.buildChassis();
        builder.buildEngine();
        builder.buildTransmission();
        return builder.getVehicle();
    }
}
  • Client
public class Client {

    public static void main(String[] args) {
        // client要一辆奔驰
        Director director = new Director();
        // 了解需求了找到建造者
        AbstractVehicleBuilder builder = new BenzBuilder();
        Benz benz = (Benz) director.build(builder);
        // 好了,跑跑看
        benz.run();

    }

}
  1. 类图


    builder.png

示例中,只有一个具体产品,对于一个具体的建造者,建造业务在指导者的建造方法内,具体的建造作业由建造者来实行。client只要告诉建造方需要的产品类型,剩下的都交给建造者。
如果将来需要建造奥迪汽车,执行增加对应的实体类和建造者类即可。

所以,建造者模式的本质是抽象出构建的通用流程,细节有具体的实现类完成。从而达到构建和表示分离。

你可能感兴趣的:(03.建造者模式)