Java中常用的设计模式之建造者模式详解

 更新时间:2022年02月28日 09:42:33   作者:Asurplus、  
这篇文章主要为大家详细介绍了Java中常用的设计模式之建造者模式,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助

优点

1.建造者独立,易扩展。

2.便于控制细节风险。

缺点

1.产品必须有共同点,范围有限制。

2.如内部变化复杂,会有很多的建造类。

使用场景

1.需要生成的对象具有复杂的内部结构。

2.需要生成的对象内部属性本身相互依赖。

一、实现方式

package com.asurplus.common.builder.style1;
public class UserInfo {
    private String name;
    private int age;
    /**
     * 创建一个新的建造者
     *
     * @return
     */
    public static UserInfoBuilder builder() {
        return new UserInfoBuilder();
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
	@Override
    public String toString() {
        return "UserInfo{" +
                "name='" + name +
                ", age=" + age +
                '}';
    }
    /**
     * 建造者内部类
     */
    public static class UserInfoBuilder {
        private String name;
        private int age;
        public UserInfoBuilder name(String name) {
            this.name = name;
            return this;
        }
        public UserInfoBuilder age(int age) {
            this.age = age;
            return this;
        }
        /**
         * 创建一个新的实例对象并赋值
         *
         * @return
         */
        public UserInfo build() {
            UserInfo userInfo = new UserInfo();
            userInfo.setName(this.name);
            userInfo.setAge(this.age);
            return userInfo;
        }
    }
}

我们定义了一个 UserInfo 类,有 name,age 两个属性,还定义了一个静态内部类 UserInfoBuilder,帮助我们建造 UserInfo,并提供链式调用的方法。

二、实现方式

1、引入依赖

<!-- lombok插件 -->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>

Lombok 需要在 IDEA 中安装插件,具体方法,请百度。

2、实现

package com.asurplus.common.builder.style2;
import lombok.Builder;
import lombok.Data;
/**
 * get set toString 方法注解
 */
@Data
/**
 * 建造者模式注解
 */
@Builder
public class UserInfo2 {
    private String name;
    private int age;
}

基于 Lombok 的注解,我们省略了大部分代码,但是具体的实现方式和我们的方式一是一模一样的,调用方法也是一样的。

三、测试

package com.asurplus.common.builder;
import com.asurplus.common.builder.style1.UserInfo;
import com.asurplus.common.builder.style2.UserInfo2;
/**
 * 建造者模式
 */
public class TestMain {
    public static void main(String[] args) {
        // 手写的方式
        UserInfo userInfo = UserInfo.builder().name("张三").age(20).build();
        System.out.println(userInfo);
        // 注解的方式
        UserInfo2 userInfo2 = UserInfo2.builder().name("李四").age(30).build();
        System.out.println(userInfo2);
    }
}

输出结果

在这里插入图片描述

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容!   

相关文章

  • 详解SpringBoot中Controller接收对象列表实现

    详解SpringBoot中Controller接收对象列表实现

    这篇文章主要介绍了详解SpringBoot中Controller接收对象列表实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05
  • Java编程中的条件判断之if语句的用法详解

    Java编程中的条件判断之if语句的用法详解

    这篇文章主要介绍了Java编程中的条件判断之if语句的用法详解,是Java入门学习中的基础知识,需要的朋友可以参考下
    2015-11-11
  • Java 常用类解析:java异常机制,异常栈,异常处理方式,异常链,异常丢失详解

    Java 常用类解析:java异常机制,异常栈,异常处理方式,异常链,异常丢失详解

    这篇文章主要介绍了Java 常用类解析:java异常机制,异常栈,异常处理方式,异常链,异常丢失详解的相关资料,需要的朋友可以参考下
    2017-03-03
  • java递归算法的实例详解

    java递归算法的实例详解

    在本篇文章里小编给大家整理了关于java递归算法的实例内容,以及相关知识点总结,需要的朋友们可以学习下。
    2020-02-02
  • Java流形式返回前端的实现示例

    Java流形式返回前端的实现示例

    ​ Java后端开发项目时,需要给前端传一些数据,本文主要介绍了Java流形式返回前端的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • java编程实现求解八枚银币代码分享

    java编程实现求解八枚银币代码分享

    这篇文章主要介绍了java编程实现求解八枚银币代码分享,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11
  • Java Bean与Map之间相互转化的实现方法

    Java Bean与Map之间相互转化的实现方法

    这篇文章主要介绍了Java Bean与Map之间相互转化的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • 教你用Java验证服务器登录系统

    教你用Java验证服务器登录系统

    这篇文章主要介绍了教你用Java验证服务器登录系统,文中有非常详细的代码示例,对正在学习java的小伙伴们有很好的帮助,需要的朋友可以参考下
    2021-04-04
  • IDEA怎么生成UML类图的实现

    IDEA怎么生成UML类图的实现

    这篇文章主要介绍了IDEA怎么生成UML类图的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • mybatis-plus 返回部分字段的解决方式

    mybatis-plus 返回部分字段的解决方式

    这篇文章主要介绍了mybatis-plus 返回部分字段的解决方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-10-10

最新评论