构造者常规写法

构建者模式常规写法

背景

当构建一个对象,参数超过了4个;或者构建对象,属性设置有先后顺序或依赖关系等场景,可以选择使用构建者模式

常规写法

/**
 * @Description 构造器模式
 * @Date 2021/7/22 10:49 PM
 * @Created by dwb
 * 微信: snail_java
 */
public class Computer {

    /**
     * 主板  这些属性 不需要设置 set 方法;如果需要对外提供属性,可设置get方法
     */
    private String mainBoard;

    /**
     * cpu
     */
    private String cpu;

    /**
     * 内存
     */
    private String ram;

    /**
     * 显示器
     */
    private String monitor;

    /**
     * 键盘
     */
    private String keyboard;

    /**
     * 鼠标
     */
    private String mouse;

    public static class Builder {

        private String mainBoard;
        private String cpu;
        private String ram;
        private String monitor;
        private String keyboard;
        private String mouse;

        /**
         * 必须有主板才能谈得上组装电脑;所以主板是Build构造必须条件
         *
         * @param mainBoard 鼠标
         */
        public Builder(String mainBoard) {
            this.mainBoard = mainBoard;
        }

        public Builder cpu(String cpu) {
            this.cpu = cpu;
            return this;
        }

        public Builder ram(String ram) {
            this.ram = ram;
            return this;
        }

        public Builder monitor(String monitor) {
            this.monitor = monitor;
            return this;
        }

        public Builder keyboard(String keyboard) {
            this.keyboard = keyboard;
            return this;
        }

        public Builder mouse(String mouse) {
            this.mouse = mouse;
            return this;
        }

        /**
         * 前面是组装过程;这一步才是 交付给用户的 电脑;用户可以使用该电脑
         *
         * @return 返回电脑实例
         */
        public Computer build() {
            return new Computer(this);
        }
    }

    /**
     * 注意 权限是 private;这样创建实例就交给了 Builder
     *
     * @param builder 构建者(组装电脑的人)
     */
    private Computer(Builder builder) {
        this.mainBoard = builder.mainBoard;
        this.cpu = builder.cpu;
        this.ram = builder.ram;
        this.monitor = builder.monitor;
        this.keyboard = builder.keyboard;
        this.mouse = builder.mouse;
    }

    public void start() {
        System.out.println(mainBoard + " 启动;\n"
                + ram + " 读取程序;\n"
                + cpu + " 调度程序;\n"
                + monitor + " 显示图像;\n"
                + keyboard + " 打字;\n"
                + mouse + " 控制光标");
    }

    public static void main(String[] args) {
        Computer computer = new Builder("华硕主板")
                .cpu("i5处理器").ram("金士顿内存")
                .monitor("小米显示器").keyboard("罗技键盘").mouse("雷蛇鼠标")
                .build();

        computer.start();
    }

}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 有人说过,很多弯路到最后都成了直路,所有的坑到最后也都成了坦途;所谓的直路和坦途并不是摆在眼前的,都是不断的的...
    老衲法号一眉道人阅读 1,378评论 0 4
  • 我是黑夜里大雨纷飞的人啊 1 “又到一年六月,有人笑有人哭,有人欢乐有人忧愁,有人惊喜有人失落,有的觉得收获满满有...
    陌忘宇阅读 8,605评论 28 53
  • 信任包括信任自己和信任他人 很多时候,很多事情,失败、遗憾、错过,源于不自信,不信任他人 觉得自己做不成,别人做不...
    吴氵晃阅读 6,227评论 4 8
  • 步骤:发微博01-导航栏内容 -> 发微博02-自定义TextView -> 发微博03-完善TextView和...
    dibadalu阅读 3,182评论 1 3
  • 人工智能是什么?什么是人工智能?人工智能是未来发展的必然趋势吗?以后人工智能技术真的能达到电影里机器人的智能水平吗...
    ZLLZ阅读 3,901评论 0 5