小工具      在线工具  汉语词典  css  js  c++  java

Java Builder 模式

Java 额外说明

收录于:42天前

package com.JXWork.test;

/**
 * @auther: TF12778
 * @date: 2020/3/21 13:17
 * @description:
 */

public final class Car {
    /**
     * 必需属性
     */
    final String carBody;//车身
    final String tyre;//轮胎
    final String engine;//发动机
    final String aimingCircle;//方向盘
    final String safetyBelt;//安全带
    /**
     * 可选属性
     */
    final String decoration;//车内装饰品

    /**
     * car 的构造器 持有 Builder,将builder制造的组件赋值给 car 完成构建
     * @param builder
     *
     */
    public Car(Builder builder) {
        this.carBody = builder.carBody;
        this.tyre = builder.tyre;
        this.engine = builder.engine;
        this.aimingCircle = builder.aimingCircle;
        this.decoration = builder.decoration;
        this.safetyBelt = builder.safetyBelt;
    }

    public static final class Builder {
        String carBody;
        String tyre;
        String engine;
        String aimingCircle;
        String decoration;
        String safetyBelt;

        public Builder() {
            this.carBody = "宝马";
            this.tyre = "宝马";
            this.engine = "宝马";
            this.aimingCircle = "宝马";
            this.decoration = "宝马";
        }

        /**
         * 实际属性配置方法
         * @param carBody
         * @return
         *
         */
        public Builder carBody(String carBody) {
            this.carBody = carBody;
            return this;
        }

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

        public Builder safetyBelt(String safetyBelt) {
            if (safetyBelt == null) throw new NullPointerException("没系安全带,你开个毛车啊");
            this.safetyBelt = safetyBelt;
            return this;
        }

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

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

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

        /**
         * 最后创造出实体car
         * @return
         *
         */
        public Car build() {
            return new Car(this);
        }
    }

    public static void main(String[] args) {

        /**
         * 普通车辆
         */
        Car publicCar = new Builder().build();
        System.out.println(publicCar);

        /**
         * 定制的车辆
         */
        Car car = new Builder().carBody("大众车身")
                .tyre("大众品牌")
                .engine("波音")
                .decoration("比亚迪")
                .aimingCircle("宝骏")
                .safetyBelt("特斯拉")
                .build();
        System.out.println(car);
    }
}

参考:Java 构建器模式

. . .

相关推荐

额外说明

SQL SERVER 2008 R2下载地址

一、连接如下 SQL SERVER 2008 R2下载地址分享 链接: https://pan.baidu.com/s/1vW-qaAtxrdvdiRs6cKyfLg 密码: bsux      

额外说明

MySQl&&Naicat连接及JDBC集合

MySQl&&Naicat连接及JDBC 一.MySQl下载 官网链接:https://dev.mysql.com/downloads/ 以windows为例:进入选择第一个版本下载就可. 之后跳转到一个新界面,点击 No thanks, just st

额外说明

logstash 与ElasticSearch:从CSV文件到搜索宝库的导入指南

logstash 与ElasticSearch:从CSV文件到搜索宝库的导入指南 使用 logstash 导入数据到 ES 时,由三个步骤组成:input、filter、output。整个导入过程可视为:unix 管道操作,而管道中的每一步操作都是由 “

额外说明

JavaWeb-HTML常用标签了解(一)

这里写目录标题 注释标签 标题标签 段落标签 换行标签 格式化标签 图片标签 超链接标签 外部链接与内部链接 注释标签 <!-- 有注释 --> 无注释 ctrl + / 快捷键可以快速进行注释/取消注释. 注意 注释不能传达负能量!!! 标

额外说明

VC 编程技巧 (五)

(1) DLL中的模板成员函数? 在一个DLL中,我在自己创建的类中使用了模板成员函数来代替预处理宏.但出现以下错误:   error C2664: 'double Data::extract(double &)' : cannot convert pa

额外说明

阿里云机器的JVM内存调优经历(菜鸟必看,大神请绕道)

        事先声明:本文为JVM调优菜鸟帖,纯粹是记录下自己的摸索过程,阅读人群为从未搞过JVM调优的童鞋,大神请忽视本文,写作水平有限,不喜勿喷,谢谢!           之前在阿里云上买了个最低配的云主机,1核  1G内存,1M带宽,供自己做

额外说明

【算法】约瑟夫环问题解析与实现

导言 约瑟夫环(Josephus Problem)是一个经典的数学问题,涉及一个编号为 1 到 n 的人围成一圈,从第一个人开始报数,报到某个数字 m 的人出列,然后再从下一个人开始报数,如此循环,直到所有人都出列。本篇博客将详细解析约瑟夫环问题,并使用

额外说明

接口幂等性设计的最佳实现

一、什么是幂等 二、为什么需要幂等 三、接口超时了,到底如何处理? 四、如何设计幂等 全局的唯一性ID 幂等设计的基本流程 五、实现幂等的8种方案 select+insert+主键/唯一索引冲突 直接insert + 主键/唯一索引冲突 状态机幂等 抽取

额外说明

Linux【入门篇】—— 概述、虚拟机创建、环境配置、vmtools的安装使用、共享文件夹的使用

目录 一、Linux 概述 二、Linux 环境搭建 1. 软件下载(附下载地址) 2. 环境搭建 3. 补充:网络连接的三种模式 三、虚拟机相关操作 1. 虚拟机克隆 2. 虚拟机快照 3. 虚拟机迁移和删除 四、安装 vmware tools 五、共

ads via 小工具