建造者模式

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

工厂类模式提供的是创建单个类的模式,而建造者模式则是将各种产品集中起来进行管理,用来创建复合对象,所谓复合对象就是指某个类具有不同的属性,其实建造者模式就是前面抽象工厂模式和最后的Test结合起来得到的。

建造者模式通常包括下面几个角色:

1、Builder:给出一个抽象接口,以规范产品对象的各个组成成分的建造。这个接口规定要实现复杂对象的哪些部分的创建,并不涉及具体的对象部件的创建。

2、ConcreteBuilder:实现Builder接口,针对不同的商业逻辑,具体化复杂对象的各部分的创建。 在建造过程完成后,提供产品的实例。

3、Director:调用具体建造者来创建复杂对象的各个部分,在指导者中不涉及具体产品的信息,只负责保证对象各部分完整创建或按某种顺序创建。

4、Product:要创建的复杂对象。

要创建的对象 product

public class Car {
    
    private Engine engine;
    
    private Tyre tyre;

    public Car(Engine engine, Tyre tyre) {
        super();
        this.engine = engine;
        this.tyre = tyre;
    }
    
}
public class Tyre {

    private String model;

    private String size;

    public void setModel(String model) {
        this.model = model;
    }

    public void setSize(String size) {
        this.size = size;
    }

}

class Engine {

    private String model;

    private String size;

    public void setModel(String model) {
        this.model = model;
    }

    public void setSize(String size) {
        this.size = size;
    }

}

抽象的接口Builder

//Builder
public interface CarBuilder {
    
    Engine engineBuilder();
    
    Tyre tyreBuilder();

}

具体化复杂对象的创建

//ConcreteBuilder
public class SubCarBuilder implements CarBuilder {

    @Override
    public Engine engineBuilder() {
        Engine engine = new Engine();
        engine.setModel("红旗");
        engine.setSize("16X");
        return engine;
    }

    @Override
    public Tyre tyreBuilder() {
        Tyre tyre = new Tyre();
        tyre.setModel("长城");
        tyre.setSize("1X");
        return tyre;
    }

}

Director 负责组装

public class Director {
    
    public static Car carAssembly(CarBuilder carBuilder){
        Engine engine = carBuilder.engineBuilder();
        Tyre tyre = carBuilder.tyreBuilder();
        return new Car(engine, tyre);
    }
    
    public static void main(String[] args) {
        SubCarBuilder subCarBuilder = new SubCarBuilder();
        Car car = carAssembly(subCarBuilder);
        System.out.println(car.toString());
    }
}
原文地址:https://www.cnblogs.com/pickKnow/p/11098943.html