首页 > 技术文章 > 建造者模式

yangfei629 2019-08-18 18:11 原文

构建者模式是为了把对象的构建和表现分离

 

当一个对象比较复杂时,我们需要如何做?


 

重载构造方法

public class BuildMode {
    private String param1;

    private String param2;

    private String param3;

    private String param4;

    public BuildMode(){
        new BuildMode(param1,"","","");
    }

    public BuildMode(String param1){
        new BuildMode(param1,"","","");
    }

    public BuildMode(String param1,String param2){
        new BuildMode(param1,param2,"","");
    }

    public BuildMode(String param1,String param2,String param3){
        new BuildMode(param1,param2,param3,"");
    }

    public BuildMode(String param1,String param2,String param3,String param4){
        this.param1 = param1;
        this.param2 = param2;
        this.param3 = param3;
        this.param4 = param4;
    }
}

构造方法重用 ,使用者根据参数来创建对象,代码比较繁琐

  


 

javaBeans方式

public class BuildMode {
    private String param1;

    private String param2;

    private String param3;

    private String param4;

    public String getParam1() {
        return param1;
    }

    public void setParam1(String param1) {
        this.param1 = param1;
    }

    public String getParam2() {
        return param2;
    }

    public void setParam2(String param2) {
        this.param2 = param2;
    }

    public String getParam3() {
        return param3;
    }

    public void setParam3(String param3) {
        this.param3 = param3;
    }

    public String getParam4() {
        return param4;
    }

    public void setParam4(String param4) {
        this.param4 = param4;
    }
}

使用:

BuildMode buildMode = new BuildMode()

buildMode.setParam1("param1");

buildMode.setParam2("param2");

buildMode.setParam3("param3");

buildMode.setParam4("param4");

 

 代码可读行不好。


 

构建者模式

package com.yangfei.design;

public class BuildMode {
    private String param1;

    private String param2;

    private String param3;

    private String param4;

    public BuildMode(Build build){
        this.param1 =  build.param1;
        this.param2 =  build.param2;
        this.param3 =  build.param3;
        this.param4 =  build.param4;
    }

    public static final class Build{
        private String param1;

        private String param2;

        private String param3;

        private String param4;

        public Build(String required){
            this.param4 = required;
        }

        public  Build setParam1(String param1) {
            this.param1 = param1;
            return this;
        }

        public  Build setParam2(String param2) {
            this.param2 = param2;
            return this;
        }

        public  Build setParam3(String param3) {
            this.param3 = param3;
            return this;
        }

        public BuildMode build() {
            return new BuildMode(this);
        }

    }

    public static void main(String[] args) {
        BuildMode.Build build = new BuildMode.Build("required");
        //使用建造者模式 可读行更好
        BuildMode buildModeInstance = build.setParam1("param1")
                .setParam2("param2")
                .setParam3("param3").build();
    }
}
View Code

 

当参数越来越多时 推荐使用建造者模式!

推荐阅读