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

网友投稿 363 2022-08-25


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

目录优点缺点使用场景一、实现方式二、实现方式1、引入依赖2、实现三、测试总结

优点

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、引入依赖

org.projectlombok

lombok

true

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;

}VDcuN

基于 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);

}

}

输出结果

总结

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


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:python基础总结:4.2、接下来?(python入门总结)
下一篇:《流畅的Python》读书笔记——Python函数装饰器和闭包(python闭包与装饰器有啥关系)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~