文章最前: 我是Octopus,这个名字来源于我的中文名--章鱼;我热爱编程、热爱算法、热爱开源。所有源码在我的个人github ;这博客是记录我学习的点点滴滴,如果您对 Python、Java、AI、算法有兴趣,可以关注我的动态,一起学习,共同进步。
相关文章:
- LeetCode:55. Jump Game(跳远比赛)
- Leetcode:300. Longest Increasing Subsequence(最大增长序列)
- LeetCode:560. Subarray Sum Equals K(找出数组中连续子串和等于k)
用了@builder注解感觉很神奇,所有就看了下Builder的实现;
package com.example.demo.mapdemo;
import lombok.Builder;
import lombok.Data;
/**
* 使用builder注解
*
* @author: zhangyu
*/
@Data
@Builder
public class Person{
int age;
int grade;
String name;
}
自己手动按照这个例子实现了一下Builder注解的作用。
**
* 实现builder注解的作用
*
* @author: zhangyu
*/
public class Person {
int age;
int grade;
String name;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public static class Builder {
private String name;
private int age;
private int grade;
public Builder(String name) {
this.name = name;
}
public Builder age(int val) {
age = val;
return this;
}
public Builder grade(int val) {
grade = val;
return this;
}
public Person build() {
return new Person(this);
}
}
private Person(Builder builder) {
age = builder.age;
grade = builder.grade;
}
}
这个是Builder的实现方式;它既能保证重叠构造器模式那样的安全性,也能保证像javabean模式那么好的可读性;不直接生成自己想要的对象,而是让builder对象上调用类似于setter方法,来设置每个相关的可选参数,最后,客户端调用无参数的build。
Person person = Person.builder().age(22).name("zhangyu").grade(67).build(); System.out.println(person);
这样的方式,易于阅读,builder模式模拟了具体名的可选参数,就行python一样;
当时使用builder也有它自身的不足,为了创建对象,必须先构建它的构建器,如果再类的构造器或者静态工厂中有多个参数,设计这样类型时候,builder模型就是一个不错的选择,特别是当大多数参数是可选的,与使用传统的重叠结构构造器模式相比,使用builder模式的代码更容易阅读和编写;构造器也比javabeans更加的安全。