返回顶部
首页 > 资讯 > 精选 >java中Builder原理的示例分析
  • 170
分享到

java中Builder原理的示例分析

2023-06-22 06:06:33 170人浏览 安东尼
摘要

这篇文章主要为大家展示了“java中Builder原理的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“java中Builder原理的示例分析”这篇文章吧。首先给一个简单的Builder设

这篇文章主要为大家展示了“java中Builder原理的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“java中Builder原理的示例分析”这篇文章吧。

首先给一个简单的Builder设计模式的例子:

主实现类代码如下:

public class CompanyClient {    public String companyName;    // 用final修饰的成员变量表示常量,只能被赋值一次,赋值后值无法改变! final修饰的变量有三种:静态变量、实例变量和局部变量。    public String companyAddress;      public double companyRegfunds;    public String mPerson;    public String mType;          //构造方法      public CompanyClient() {         this(new Builder());     }     //构造方法     public CompanyClient(Builder builder){         this.companyName = builder.companyName;         this.companyAddress = builder.companyAddress;         this.companyRegfunds = builder.companyRegfunds;         this.mPerson = builder.person;         this.mType = builder.type;     }     public String getCompanyName() {         return companyName;     }       public String getCompanyAddress() {         return companyAddress;     }       public double getCompanyRegfunds() {         return companyRegfunds;     }       public String getmPerson() {         return mPerson;     }       public String getmType() {         return mType;     }              public Builder newBuilder() {         return new Builder(this);     }       @Override //重写toString方法后,当print这个对象的时候,会默认的调用toString()这个方法。     public String toString() {         return "CompanyClient{" +                 "companyName='" + companyName + '\'' +                 ", companyAddress='" + companyAddress + '\'' +                 ", companyRegfunds=" + companyRegfunds +"千万"+                 ", mPerson=" + mPerson +                 ", mType='" + mType + '\'' +                 '}';     }          public static class Builder{        public String companyName;        public String companyAddress;        public  double companyRegfunds;        public  String person;        public String type;        //构造方法        public Builder() {            companyName = companyName;            companyAddress = companyAddress;            companyRegfunds = companyRegfunds;            person = person;            type = type;          }        //构造方法        Builder(CompanyClient companyClient){            this.companyName = companyClient.companyName;            this.companyAddress = companyClient.companyAddress;            this.companyRegfunds = companyClient.companyRegfunds;            this.person = companyClient.mPerson;            this.type = companyClient.mType;        }          public Builder setCompanyName(String name) {            companyName = name;            return this;        }          public Builder setCompanyAddress(String address) {            companyAddress = address;            return this;        }          public Builder setCompanyRegfunds(double regfunds) {            companyRegfunds = regfunds;            return this;        }          public Builder setmPerson(String per) {            person = per;            return this;        }          public Builder setmType(String typeStr) {            type = typeStr;            return this;        }         //构建一个实体         public CompanyClient build() {             return new CompanyClient(this);         }    } }

测试类实现代码如下:

public class TestBuilder {    public static void main(String[] args) {         CompanyClient client = new CompanyClient.Builder()                .setCompanyName("alibaba")                .setCompanyAddress("wangjing")                .setCompanyRegfunds(5)                .setmPerson("10000")                .build();        System.out.println(client);        System.out.println("---------------------");        CompanyClient.Builder builder = new CompanyClient.Builder();        builder.setCompanyName("huawei");        builder.setCompanyAddress("haidian");        builder.setCompanyRegfunds(20);        builder.setmType("communication");        CompanyClient client1 = builder.build();        System.out.println(client1);        System.out.println("---------------------");        CompanyClient.Builder build1 = client1.newBuilder();        build1.setCompanyName("baidu");        CompanyClient client2 = build1.build();        System.out.println(client2);    }}

输出结果如下:

CompanyClient{companyName='alibaba', companyAddress='wangjing', companyRegfunds=5.0千万, mPerson=10000, mType='null'}---------------------CompanyClient{companyName='huawei', companyAddress='haidian', companyRegfunds=20.0千万, mPerson=null, mType='communication'}---------------------CompanyClient{companyName='baidu', companyAddress='haidian', companyRegfunds=20.0千万, mPerson=null, mType='communication'}

首先看main函数中的第一行代码:

CompanyClient client = new CompanyClient.Builder()                .setCompanyName("alibaba")                .setCompanyAddress("wangjing")                .setCompanyRegfunds(5)                .setmPerson("10000")                .build();

之所以可以这么执行,是因为内部静态类Builder里定义了一份与CompanyClient类一模一样的变量,通过一系列的成员函数进行设置属性值,但是返回值都是this,也就是都是Builder对象,最后提供了一个build函数用于创建CompanyClient对象,返回的是CompanyClient对象,对应的构造函数在CompanyClient 类中进行定义,也就是构造函数的入参是Builder对象,然后依次对自己的成员变量进行赋值,对应的值都是Builder对象中的值。此外Builder类中的成员函数返回Builder对象自身的另一个作用就是让它支持链式调用,使代码可读性大大增强。

总结下,Java环境下builder设计模式:

定义一个静态内部类Builder,内部的成员变量和外部类一样

Builder类通过一系列的方法用于成员变量的赋值,并返回当前对象本身(this)

Builder类提供一个build方法或者create方法用于创建对应的外部类,该方法内部调用了外部类的一个私有构造函数,该构造函数的参数就是内部类Builder

外部类提供一个私有构造函数供内部类调用,在该构造函数中完成成员变量的赋值,取值为Builder对象中对应的值

以上是“java中Builder原理的示例分析”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网精选频道!

--结束END--

本文标题: java中Builder原理的示例分析

本文链接: https://lsjlt.com/news/303067.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • java中Builder原理的示例分析
    这篇文章主要为大家展示了“java中Builder原理的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“java中Builder原理的示例分析”这篇文章吧。首先给一个简单的Builder设...
    99+
    2023-06-22
  • Flex Builder的示例分析
    这篇文章给大家分享的是有关Flex Builder的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Flex Builder简介Flex Builder是 Macromedia 的 IDE,用于 Flex ...
    99+
    2023-06-17
  • Java中Lock原理的示例分析
    小编给大家分享一下Java中Lock原理的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!常用的java框架有哪些1.SpringMVC,Spring We...
    99+
    2023-06-14
  • Java中Builder模式构建MAP/LIST的示例分析
    这篇文章主要为大家展示了“Java中Builder模式构建MAP/LIST的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Java中Builder模式构建MAP/LIST的示例分析”这篇...
    99+
    2023-05-31
    builder模式 map list
  • java中多态原理的示例分析
    这篇文章将为大家详细讲解有关java中多态原理的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Java可以用来干什么Java主要应用于:1. web开发;2. Android开发;3. 客户端开发...
    99+
    2023-06-14
  • electron-builder打包的示例分析
    这篇文章主要介绍了electron-builder打包的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。开发electron客户端程序...
    99+
    2024-04-02
  • Java并发中AQS原理的示例分析
    这篇文章给大家分享的是有关Java并发中AQS原理的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。线程阻塞原语Java 的线程阻塞和唤醒是通过 Unsafe 类的 park 和 unpark 方法做到的。...
    99+
    2023-06-02
  • js中this原理的示例分析
    这篇文章主要介绍了js中this原理的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。首先我们来概括下this.this是一个对象,一...
    99+
    2024-04-02
  • jsonp原理的示例分析
    小编给大家分享一下jsonp原理的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一:跨域问题。二,跨域产生的原因Js是不...
    99+
    2024-04-02
  • AJAX原理的示例分析
    这篇文章将为大家详细讲解有关AJAX原理的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。先上原理图: 背景:   &nbs...
    99+
    2024-04-02
  • Java类和对象原理的示例分析
    小编给大家分享一下Java类和对象原理的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!面向对象、面向过程什么是类?什么是对象?这是非常抽象的两个概念!!!!!!!!在说清楚类和对象的概念之前,给大家讲一下什么是面向...
    99+
    2023-06-29
  • Java中HashSet原理及常用方法的示例分析
    小编给大家分享一下Java中HashSet原理及常用方法的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一. HashSet概述HashSet是Java集...
    99+
    2023-06-02
  • mysql中视图原理的示例分析
    小编给大家分享一下mysql中视图原理的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一、什么是视图视图是指计算机数据库中的视图,是一个虚拟表,其内容由查询定义。同真实的表一样,视...
    99+
    2024-04-02
  • SparkSQl中运行原理的示例分析
    这篇文章将为大家详细讲解有关SparkSQl中运行原理的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一:什么是SparkSQL?(一)SparkSQL简介Spark SQL是Spark的一个模块...
    99+
    2023-06-20
  • kubernetes中网络原理的示例分析
    小编给大家分享一下kubernetes中网络原理的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一:体系结构图二:说明1.网络命名空间处于不同命名空间的网...
    99+
    2023-06-04
  • 链表原理及java实现的示例分析
    这篇文章主要介绍了链表原理及java实现的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一:单向链表基本介绍链表是一种数据结构,和数组同级。比如,Java中我们使用的...
    99+
    2023-05-30
    java
  • keep-alive原理的示例分析
    这篇文章将为大家详细讲解有关keep-alive原理的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、前言本文介绍的内容包括:keep-alive用法:动态组件...
    99+
    2024-04-02
  • Java原型模式的示例分析
    这篇文章主要介绍了Java原型模式的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1.思考问题现在有一只羊 tom,姓名为: tom,年龄为:1,颜色为:白色,请编写...
    99+
    2023-06-29
  • java并发中DelayQueue延迟队列原理的示例分析
    这篇文章给大家分享的是有关java并发中DelayQueue延迟队列原理的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。介绍DelayQueue队列是一个延迟队列,DelayQueue中存放的元素必须实现...
    99+
    2023-06-15
  • Vue中响应式原理的示例分析
    这篇文章主要介绍了Vue中响应式原理的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Vue 嘴显著的特性之一便是响应式系统(reac...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作