建造者模式在jdk+guava+spring+mybatis源码解析

This commit is contained in:
2018-09-25 19:35:45 +08:00
parent 10a9c4c435
commit 51960134d3
3 changed files with 33 additions and 1 deletions

View File

@@ -68,6 +68,13 @@
<version>1.3.2</version> <version>1.3.2</version>
</dependency> </dependency>
<!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>26.0-jre</version>
</dependency>
<dependency> <dependency>
<groupId>org.springframework</groupId> <groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId> <artifactId>spring-webmvc</artifactId>

View File

@@ -1,9 +1,24 @@
package top.fjy8018.designpattern.pattern.creational.builder.chain; package top.fjy8018.designpattern.pattern.creational.builder.chain;
import com.google.common.collect.ImmutableSet;
import org.apache.ibatis.builder.xml.XMLConfigBuilder;
import org.apache.ibatis.parsing.XNode;
import java.io.Reader;
/** /**
* 实体类 * 实体类
* 当只需要构建一个对象时,可以使用建造者,如果构建多个对象或者一类对象,则使用工厂方法或者抽象工厂
*
* 用静态内部类建造者,实现链式调用(推荐) * 用静态内部类建造者,实现链式调用(推荐)
* *
* JDK源码样例{@link StringBuilder#append(int)} 和 {@link StringBuffer#append(int)} 区别在于后者对所有append方法加上同步关键字
* guava源码样例不可变集合 {@link ImmutableSet.Builder#build()}
* Spring源码样例{@link org.springframework.beans.factory.support.BeanDefinitionBuilder}
* mybatis源码样例{@link org.apache.ibatis.session.SqlSessionFactoryBuilder#build(Reader)} 封装了读XML的操作
* 实际调用的是{@link XMLConfigBuilder#parseConfiguration(XNode)} 解析XML节点将复杂的XML解析过程一次建造完成
*
*
* @author F嘉阳 * @author F嘉阳
* @date 2018-09-25 17:13 * @date 2018-09-25 17:13
*/ */

View File

@@ -1,10 +1,11 @@
package top.fjy8018.designpattern.pattern.creational.builder; package top.fjy8018.designpattern.pattern.creational.builder;
import com.google.common.collect.ImmutableSet;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import top.fjy8018.designpattern.pattern.creational.builder.chain.BuCourse; import top.fjy8018.designpattern.pattern.creational.builder.chain.BuCourse;
import static org.junit.jupiter.api.Assertions.*; import java.util.Set;
@Slf4j @Slf4j
class CourseBuilderTest { class CourseBuilderTest {
@@ -26,4 +27,13 @@ class CourseBuilderTest {
.build(); .build();
log.info(course.toString()); log.info(course.toString());
} }
/**
* 不可变集合源码测试
*/
@Test
void ImmutableSetBuild() {
Set<String> set = ImmutableSet.<String>builder().add("f").add("j").add("y").build();
log.info(set.toString());
}
} }