首页 > 其他 > 详细

5.建造者模式

时间:2020-03-13 11:30:07      阅读:62      评论:0      收藏:0      [点我收藏+]

一.介绍

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

技术分享图片

 

 五.总结

技术分享图片

 

 技术分享图片

 

5.建造者模式

原文:https://www.cnblogs.com/zhihaospace/p/12484090.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!