您的位置:首页 > 编程语言 > Java开发

SpringBoot设计模式-建造者模式/静态内部类的应用

2018-03-07 21:25 411 查看
建造者模式
用途:使得类可以以链式方法实例化对象
意义:其实现是静态内部类的典型应用,可以让大家很好理解静态内部类的意义
为什么用内部类? 为什么是静态?
首先,实例化对象的常见做法就是创建一个空实例,然后多次调用set方法;public class User {

private String name;
private Integer age;

public void setName(String name) {
this.name = name; }
public void setAge(Integer age) {
this.age = age; }
}对应的实例化对象实例化过程:User user = new User();
user.setName("Evan");
user.setAge(25);这一段大家一定非常熟悉,当字段特别多的时候简直无聊到爆,有没有一种更舒服的方式实力化对象呢?
有,那就是链式方式实力化对象,爽吧,一直一直.set下去,怎么做到的呢?UserBuilder userB = new UserBuilder().setName("Evan").setAge(25);很巧妙的一种方式,每个set函数返回值都是this,类型都是UserBuilder,这样就可以一直调用下去,是不是很机智。但是这样也有一些问题。public class UserBuilder {

private String name;
private Integer age;

public UserBuilder setName(String
4000
name){
this.name = name;
return this;
}
public UserBuilder setAge(Integer name){
this.age=age;
return this;
}
}
使用UserBuilder只是常见实例化方式的一种不同,UserBuilder类虽然内容相同,返回的不是User类,有人说简单UserBuilder改成User不就可以了吗,但是这样和User重名了,而且是单独一个文件。综上我们发现:

UserBuilder最好能返回User对象;
UserBuilder没必要单独以class文件形式存在,只是User类实例化的一种备选;
如何才能让好用的UserBuilder成为User的一部分呢?
成为内部类:public class User {

private String name;
private Integer age;

public User() {
}

public User(String name, Integer age) {
this.name = name;
this.age = age;
}

public void setName(String name) {
this.name = name;
}
public void setAge(Integer age) {
this.age = age;
}
//静态内部类 这样可以通过User直接调用 User.UserBuilder可以当成一个新类看
public static class UserBuilder {

private String name;
private Integer age;

public UserBuilder setName(String name){
this.name = name;
return this;
}
public UserBuilder setAge(Integer name){
this.age=age;
return this;
}
//通过UserBuilder调用链式方法实例化,返回对应的User对象
public User build(){
return new User(name, age);
}
}
}这样我们就看出了使用内部类的精髓:
内部类和外部类有强相关关系,辅助外部类而存在,无需单独存在。
如本文中的UserBuilder只是User实例化的一种替补方式
那么为什么是静态类呢,因为方便调用,UserBuilder作为User的静态成员,可以通过User直接调用 User.UserBuilder可以当成一个新类看 ,如下创建User user = new User.UserBuilder()
.setName("Evan")
.setAge(10).build();当然不使用静态也是可以的,但是就很麻烦,需要先创建user对象,再实例化UserBuilder类:User user = new User();
User user2 = user.new UserBuilder()
.setName("Evan")
.setAge(10).build();
所以使用静态内部类,在这里主要是考虑调用UserBuilder方便。
此外,静态内部类的特点还包括只能访问外部类的静态成员变量,静态成员方法
不过本例内部类只作为外部类补充,没有与外部类变量的交互。希望通过我的讲解,让大家对建造者模式和静态内部类有更深的了解
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: