建造者模式-java

103 阅读1分钟

建造者模式

建造者模式是用来构建复杂对象的,例如构造方法中参数过多,使用建造者模式可以让调用者更容易的理解对象的功能。下面使用建造者模式来创建小米手机。调用在进行构建对象时,可以做到见名知意,还可以链式编程。

建造者模式代码

public class XiaoMi {
    // 小米手机的属性
    private String cpu;
    private String screen;
    private String memory;
    private String mainboard;

    // 私有构造器
    private XiaoMi(Builder builder) {
        // 通过创建者把参数赋值
        this.cpu = builder.cpu;
        this.screen = builder.screen;
        this.memory = builder.memory;
        this.mainboard = builder.mainboard;
    }

    // 重新toString方法
    @Override
    public String toString() {
        return "XiaoMi{" +
                "cpu='" + cpu + ''' +
                ", screen='" + screen + ''' +
                ", memory='" + memory + ''' +
                ", mainboard='" + mainboard + ''' +
                '}';
    }

    // 静态内部类(建造者)
    public static final class Builder {
        // 和外部保持一样的属性
        private String cpu;
        private String screen;
        private String memory;
        private String mainboard;

        // 构造方法
        public Builder(){}

        // 设置cpu
        public Builder setCpu(String val) {
            this.cpu = val;
            return this;
        }

        // 设置屏幕
        public Builder setScreen(String val) {
            this.screen = val;
            return this;
        }

        // 设置内存条
        public Builder setMemory(String val) {
            this.memory = val;
            return this;
        }

        // 设置主板
        public Builder setMainBoard(String val) {
            this.mainboard = val;
            return this;
        }

        // 构建对象
        public XiaoMi builder() {
            return new XiaoMi(this);
        }
    }
}

测试代码

public class Test {
    public static void main(String[] args) {
        // 构建小米手机对象
        XiaoMi xiaoMi = new XiaoMi.Builder()
                .setCpu("高通骁龙996")
                .setScreen("三星屏幕")
                .setMemory("高通内存")
                .setMainBoard("小米主板")
                .builder();

        System.out.println(xiaoMi.toString());
    }
}

运行结果

0006.png