建造者模式

240 阅读2分钟

建造者模式概念

建造者模式是一种对象构建方式,它可以将复杂的对象的建造过程抽象出来,使这个抽象过程的不同实现方法可以构造出不同的对象。且构造过程都是相对独立的,流程相同但建造的方法不同,我们先把流程涉及到的类分成四个角色。

建造者四个角色
  • Product 产品
  • Builder 建造者抽象类
  • ConcreateBuilder 具体建造方法类
  • Director 产品实现类
建造者角色实现
public class House {

    private String base; //地基
    private String wall; //墙

    public String getBase() {
        return base;
    }

    public void setBase(String base) {
        this.base = base;
    }

    public String getWall() {
        return wall;
    }

    public void setWall(String wall) {
        this.wall = wall;
    }
}

House:需要建造的产品

/**
 * 建造者抽象类
 */
public abstract class HouseBuild {

    protected House house = new House();

    //建造过程
    public abstract void buildBase();
    public abstract void buildWall();

    //组合建造
    public House getHouse() {
        return house;
    }
}

HouseBuild:产品建造的共性,但是建造方法不同。

/**
 * 建造者实现类
 * 制造流程与产品分开 解耦
 */
public class HouseBuildImpl extends HouseBuild {

    @Override
    public void buildBase() {
        System.out.println("普通房地基5M");
    }

    @Override
    public void buildWall() {
        System.out.println("普通房砌墙10CM");
    }
}
/**
 * 建造者实现类
 */
public class HighBuildImpl extends HouseBuild {

    @Override
    public void buildBase() {
        System.out.println("高楼地基500M");
    }

    @Override
    public void buildWall() {
        System.out.println("高楼砌墙10M");
    }
}

两种不同建造抽象实现类,制造流程与产品分开,实现解耦,后续再有产品不同建造方法看来,扩展性较好。

/**
 * 指挥者
 */
public class HouseDirector {

    HouseBuild houseBuild = null;

    // 通过构造器传入或者set注入

    public HouseDirector(HouseBuild houseBuild) {
        this.houseBuild = houseBuild;
    }

    public void setHouseBuild(HouseBuild houseBuild) {
        this.houseBuild = houseBuild;
    }

    // 建造者的作用 建造顺序交由指挥者
    public House getHouse() {
        houseBuild.buildWall(); //先砌墙
        houseBuild.buildBase(); //再地基

        // 返回建造好的对象
        return houseBuild.getHouse();
    }
}

指挥建造者: 决定建造某种不同类型产品(构造注入与set注入都可)

public class buildTest {


    public static void main(String[] args) {
        // 先建造普通
        HouseBuildImpl houseBuild = new HouseBuildImpl();
        // 构造注入指挥者 告诉指挥者建造什么类型
        HouseDirector houseDirector = new HouseDirector(houseBuild);
        // 获取完成对象
        House house = houseDirector.getHouse();


        HighBuildImpl highBuild = new HighBuildImpl();
        houseDirector = new HouseDirector(highBuild);
        House house1 = houseDirector.getHouse();
    }
}

测试类: 告诉指挥者需要建造哪种类型的产品,由指挥者返回产品类型。

小结

建造者模式在产品实现方面隐藏了建造方法,不同种类不同实现,通过实现接口方式实现扩展性好,与原产品解耦。但是适用范围仅仅是产品见共同性要求高,如果产品之间差异性大则不适用于建造者模式。

详细源码下载地址: github.com/Liyinzuo/De…

以上便是建造者模式介绍与实现,如果有错误或者不足地方欢迎指正。