Builder模式使用教程

这次给大家带来Builder模式使用教程,Builder模式使用的注意事项有哪些,下面就是实战案例,一起来看一下。

概述

Builder模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

使用场景

相同的方法,不同的执行顺序,产生不同的事件结果

多个部件或零件,都可以装配到一个对象中,但产生的运行结果又不相同时

产品类非常复杂,或者产品类中的调用顺序不同产生不同的作用

当初始化一个对象特别复杂,如参数多,且很多参数都具有默认值时

下面从一个Person例子进行分析重叠构造器模式、JavaBeans模式、Builder模式的使用。Person类有两个必要参数(id和name),有5个可选参数(age,sex,phone,address和desc)

重叠构造器模式

在这种模式下,你提供第一个只有必要参数的构造器,第二个构造器有一个可选参数,第三个有两个可选参数,依此类推,最后一个构造器包含所有的可选参数。下面看看其编程实现:

/ * 使用重叠构造器模式 */public class Person { //必要参数 private final int id; private final String name; //可选参数 private final int age; private final String sex; private final String phone; private final String address; private final String desc; public Person(int id, String name) { this(id, name, 0); } public Person(int id, String name, int age) { this(id, name, age, ""); } public Person(int id, String name, int age, String sex) { this(id, name, age, sex, ""); } public Person(int id, String name, int age, String sex, String phone) { this(id, name, age, sex, phone, ""); } public Person(int id, String name, int age, String sex, String phone, String address) { this(id, name, age, sex, phone, address, ""); } public Person(int id, String name, int age, String sex, String phone, String address, String desc) { this.id = id; this.name = name; this.age = age; this.sex = sex; this.phone = phone; this.address = address; this.desc = desc; }}

登录后复制

从上面的代码中,当你想要创建实例的时候,就利用参数列表最短的构造器,但该列表中包含了要设置的所有参数:

Person person = new Persion(1, "李四", 20, "男", "18800000000", "China", "测试使用重叠构造器模式");

登录后复制

重叠构造器可行,但是当有许多参数的时候,创建使用代码会很难写,并且较难以阅读

JavaBeans模式

采用Javabean 的写法,写一堆属性的setter方法,通过生成对象,让后调用setter方法给属性赋值。

/ * 使用JavaBeans模式 */public class Person { //必要参数 private int id; private String name; //可选参数 private int age; private String sex; private String phone; private String address; private String desc; public void setId(int id) { this.id = id; } public void setName(String name) { this.name = name; } public void setAge(int age) { this.age = age; } public void setSex(String sex) { this.sex = sex; } public void setPhone(String phone) { this.phone = phone; } public void setAddress(String address) { this.address = address; } public void setDesc(String desc) { this.desc = desc; }

登录后复制

这种模式弥补了重叠构造器模式的不足。创建实例很容易,这样产生的代码读起来也很容易:

Person person = new Person();person.setId(1);person.setName("李四");person.setAge(20);person.setSex("男");person.setPhone("18800000000");person.setAddress("China");person.setDesc("测试使用JavaBeans模式");

登录后复制

JavaBeans模式因为构造过程被分到了几个调用中,在构造过程中JavaBean可能处于不一致的状态。类无法仅仅通过检验构造器参数的有效性来保证一致性。

Builder模式

Builder模式既能保证像重叠构造器那样的安全,也能实现JavaBean模式那样的可读性。

/** * 使用Builder模式 */public class Person { //必要参数 private final int id; private final String name; //可选参数 private final int age; private final String sex; private final String phone; private final String address; private final String desc; private Person(Builder builder) { this.id = builder.id; this.name = builder.name; this.age = builder.age; this.sex = builder.sex; this.phone = builder.phone; this.address = builder.address; this.desc = builder.desc; } public static class Builder { //必要参数 private final int id; private final String name; //可选参数 private int age; private String sex; private String phone; private String address; private String desc; public Builder(int id, String name) {  this.id = id;  this.name = name; } public Builder age(int val) {  this.age = val;  return this; } public Builder sex(String val) {  this.sex = val;  return this; } public Builder phone(String val) {  this.phone = val;  return this; } public Builder address(String val) {  this.address = val;  return this; } public Builder desc(String val) {  this.desc = val;  return this; } public Person build() {  return new Person(this); } }}

登录后复制

Person是不可变得,所有的默认参数值都单独放在一个地方。builder的setter方法返回builder本身,以便可以链式调用。下面是客户端使用代码:

Person person = new Person.Builder(1, “张三”)
                .age(18).sex(“男”).desc(“测试使用builder模式”).build();

Android源码中的Builder模式

AlertDialog源码

Universal-Image-Loader图片库

OkHttp的Request源码

优点:

良好的封装性,使用建造者模式可以使客户端不比知道产品内部组成的细节

建造者独立,容易扩展(可通过抽象———接口,抽象类)

缺点:

会产生多余的Builder对象以及Director对象,消耗内存

总结 :Builder模式通常作为配置类的构建器将配置的构建和表示分离开来,同时也是将配置从目标类中隔离出来,避免过多的setter方法。

相信看了本文案例你已经掌握了方法,更多精彩请关注【创想鸟】其它相关文章!

推荐阅读:

JS怎么储存原始值与引用值

JS常见函数使用详解

以上就是Builder模式使用教程的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2763364.html

(0)
上一篇 2025年3月8日 10:10:04
下一篇 2025年2月17日 23:50:15

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • beforeEach实现导航守卫案列教程

    这次给大家带来beforeEach实现导航守卫案列教程,beforeEach实现导航守卫的注意事项有哪些,下面就是实战案例,一起来看一下。 路由跳转前做一些验证,比如登录验证(未登录去登录页),是网站中的普遍需求。对此,vue-route …

    编程技术 2025年3月8日
    200
  • 在Node.js中pm2的使用(图文教程)

    pm2 是一个带有负载均衡功能的Node应用的进程管理器。可以把你的独立代码利用全部的服务器上的所有CPU,并保证进程永远都活着,0秒的重载。 pm2的主要特性: 1、内建负载均衡(使用Node cluster 集群模块) 2、后台运行 3…

    2025年3月8日
    200
  • JavaScript基础心法(图文教程,详细为你解答)

    前言 说到深浅拷贝,必须先提到的是JavaScript的数据类型,之前的一篇文章JavaScript基础心法——数据类型说的很清楚了,这里就不多说了。 需要知道的就是一点:JavaScript的数据类型分为基本数据类型和引用数据类型。 对于…

    编程技术 2025年3月8日
    200
  • JS严格模式知识点总结(详细解答)

    本篇文章给大家整理了js严格模式下的相关知识点以及代码实例分享,感兴趣的跟着小编一起学习下吧。 所谓严格模式其实就是一个不会赋值给任何变量的字符串 “use strict” 如果在全局作用域下 给出这个提示,那整个脚本将采用严格模式。也可以…

    编程技术 2025年3月8日
    200
  • ECMAscript 变量作用域总结教程

    这篇文章主要介绍了ecmascript 变量作用域,通过使用var操作符声明和未使用var操作符声明两种情景做出了解释,具体操作步骤大家可查看下文的详细讲解,感兴趣的小伙伴们可以参考一下。 使用var操作符声明的变量与未使用var操作符声明…

    2025年3月8日
    200
  • ECMAScript6新特性之let、const(图文教程)

    下面小编就为大家带来一篇浅谈ecmascript6新特性之let、const。现在就分享给大家,也给大家做个参考。 接下来来介绍一下es6中的新特性之“let”。首先,这个玩意儿其实和var这个命令类似,都是用于声明变量的,但是所声明的变量…

    2025年3月8日 编程技术
    200
  • javascript 中事件委托(图文教程)

    这篇文章主要介绍了javascript 中的事件委托详解的相关资料,需要的朋友可以参考下 这几天看到一个面试题,大概就是,让你给1000个li都添加一个click事件,应该怎么添加?大多数人第一开始的感觉可能就是,每个li上边都添加一个呗,…

    2025年3月8日
    200
  • Javascript闭包与函数柯里化浅析(图文教程)

    这篇文章主要介绍javascript闭包与柯里化,通俗易懂,需要的朋友可以参考下。 闭包和柯里化都是JavaScript经常用到而且比较高级的技巧,所有的函数式编程语言都支持这两个概念,因此,我们想要充分发挥出JavaScript中的函数式…

    编程技术 2025年3月8日
    200
  • 在javascript中创建对象的各种模式解析(图文教程)

    下面我就为大家带来一篇在javascript中创建对象的各种模式解析。现在分享给大家,也给大家做个参考 javascript中对象的创建 •工厂模式 •构造函数模式 •原型模式 立即学习“Java免费学习笔记(深入)”; •结合构造函数和原…

    编程技术 2025年3月8日
    200
  • 修改npm全局安装模式的路径步骤详解

    这次给大家带来修改npm全局安装模式的路径步骤详解,修改npm全局安装模式的路径的注意事项有哪些,下面就是实战案例,一起来看一下。 在正式写此文章之前,我得说一点血泪史。 刚学nodeJS不久,很纳闷为什么全局安装的模块在 ‘n…

    2025年3月8日
    200

发表回复

登录后才能评论