5.建造者模式

一.介绍

1.目的:将产品和生产过程相分离

2.四个角色

 

二.UML

  • House:表示产品的所有属性

  • HouseBuilder:表示产品的每个属性具体建造过程的具体实施

  • HouseDirector:表示产品整体生产流程,将每个具体过程组合

三.代码

House.java

public class House {

    private String base;
    private String wall;
    private String roof;

    public House(){

    }

    public House(String base, String wall, String roof) {
        this.base = base;
        this.wall = wall;
        this.roof = roof;
    }

    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;
    }

    public String getRoof() {
        return roof;
    }

    public void setRoof(String roof) {
        this.roof = roof;
    }

    @Override
    public String toString() {
        return "House{" +
                "baise='" + base + '\'' +
                ", wall='" + wall + '\'' +
                ", roofed='" + roof + '\'' +
                '}';
    }
}

HouseBuild.java

public abstract class HouseBuild {

    //产品
    protected House house = new House();

    public abstract void buildBase();
    public abstract void buildWall();
    public abstract void buildroof();

    //返回产品
    public House buildHouse(){
        return house;
    }
}

CommonHouse.java

public class CommonHouse extends HouseBuild {


    @Override
    public void buildBase() {
        house.setBase("common House base");
        System.out.println("build common House base");
    }

    @Override
    public void buildWall() {
        house.setWall("common House wall");
        System.out.println("build common House wall");
    }

    @Override
    public void buildroof() {
        house.setRoof("common House roof");
        System.out.println("build common House roof");
    }
}

HighBuilding.java

public class HighBuilding extends HouseBuild {


    @Override
    public void buildBase() {
        house.setBase("HighBuilding base");
        System.out.println("build HighBuilding base");
    }

    @Override
    public void buildWall() {
        house.setWall("HighBuilding wall");
        System.out.println("build HighBuilding wall");
    }

    @Override
    public void buildroof() {
        house.setRoof("HighBuilding roof");
        System.out.println("build HighBuilding roof");
    }
}

HouseDirector.java

public class HouseDirector {

    private HouseBuild houseBuild;

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

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

    //生成过程
    public House constructHouse(){

        houseBuild.buildBase();
        houseBuild.buildWall();
        houseBuild.buildroof();
        return houseBuild.buildHouse();
    }
}

BuildeDemo.java

public class BuildDemo {
    public static void main(String[] args) {

        //指定建造时每个过程的具体实施
        HouseBuild houseBuild = new CommonHouse();
        //指定整体生产流程,将具体过程组合
        HouseDirector houseDirector = new HouseDirector(houseBuild);
        //生成产品
        House house = houseDirector.constructHouse();

        System.out.println(house);
    }
}

四.JDK中使用

1.StringBuilder,AbstractStringBuilder,Appendable

 

 五.总结

 

 

 

posted @ 2020-03-13 01:31  All_just_for_fun  阅读(141)  评论(0)    收藏  举报