设计模式-建造者模式

这个比较难理解,先看例子,你家里要装修,要打造一个家具,你爸和商场里的人说了要预定沙发

沙发的属性

public 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(){ System.out.println("可以被使用"); } }

产品组装手册(每个家具的拼装手册和步骤都不一样,所以要抽象出来)

abstract class Builder {
    //产品最后要拼装好
    protected Product product=new Product();
//拼接部件A
public abstract void buildPartA();
//拼接部件B
public abstract void buildPartB();
//拼接部件C
public abstract void buildPartC(); //产品拼装好 public Product returnProduct(){ return product; } }

具体的沙发拼装手册

public class BuilderA extends Builder {
    @Override
    public void buildPartA() {
        product.setPartA("建造A部分");
    }

    @Override
    public void buildPartB() {
        product.setPartA("建造B部分");
    }

    @Override
    public void buildPartC() {
        product.setPartA("建造C部分");
    }
}

商场老板叫家具师傅拼装

public class Director {
//拿好手册
private Builder builder; //老板提供手册 public Director(Builder builder) { this.builder = builder; } //产品组装 public Product construct(){
//拼装部件A,B,C
builder.buildPartA(); builder.buildPartB(); builder.buildPartC();
//拼装好之后返回这个产品
return builder.returnProduct(); } }

去商场提沙发

public class Client {
    public static void main(String[] args) {
//有人要买沙发 BuilderA builderA
= new BuilderA();
//老板找到沙发拼装手册 Director director
= new Director(builderA);
//老板叫师傅拼装好沙发 Product construct
= director.construct();
//沙发已经好了,可以使用了 construct.show(); } }

由上面的例子可以看出,一个建造者模式设计4个角色

产品(沙发):包含多个组件的复杂对象

抽象建造者(拼装手册):一个包含创建产品各个成员组件的抽象类

具体建造者(具体的产品拼装方法): 实现创建产品各个部件的具体创造方法

指挥者(老板):调用抽象建造者对象中的组装方法完成对象的创建,不涉及产品的具体拼装过程

总结来说 建造者模式就是将某个复杂对象的成员属性进行拆分,由具体的建造者来建造,指挥者只需要调用具体建造者的方法来进行组件拼装,具体的细节交给建造者来实现。

应用场景:创建的对象虽然很复杂,会有多个部件,各部件也由可能发生变化,但组装顺序还是相对稳定的。

不和别人一样,不复制只真正理解
原文地址:https://www.cnblogs.com/Vinlen/p/12780880.html