diff --git a/pom.xml b/pom.xml index e68f9b7..2ddc0dd 100644 --- a/pom.xml +++ b/pom.xml @@ -68,6 +68,13 @@ 1.3.2 + + + com.google.guava + guava + 26.0-jre + + org.springframework spring-webmvc diff --git a/src/main/java/top/fjy8018/designpattern/pattern/creational/builder/chain/BuCourse.java b/src/main/java/top/fjy8018/designpattern/pattern/creational/builder/chain/BuCourse.java index 6f59ad2..09d9b06 100644 --- a/src/main/java/top/fjy8018/designpattern/pattern/creational/builder/chain/BuCourse.java +++ b/src/main/java/top/fjy8018/designpattern/pattern/creational/builder/chain/BuCourse.java @@ -1,9 +1,24 @@ 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嘉阳 * @date 2018-09-25 17:13 */ diff --git a/src/test/java/top/fjy8018/designpattern/pattern/creational/builder/CourseBuilderTest.java b/src/test/java/top/fjy8018/designpattern/pattern/creational/builder/CourseBuilderTest.java index ee522ca..202d96d 100644 --- a/src/test/java/top/fjy8018/designpattern/pattern/creational/builder/CourseBuilderTest.java +++ b/src/test/java/top/fjy8018/designpattern/pattern/creational/builder/CourseBuilderTest.java @@ -1,10 +1,11 @@ package top.fjy8018.designpattern.pattern.creational.builder; +import com.google.common.collect.ImmutableSet; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.Test; import top.fjy8018.designpattern.pattern.creational.builder.chain.BuCourse; -import static org.junit.jupiter.api.Assertions.*; +import java.util.Set; @Slf4j class CourseBuilderTest { @@ -26,4 +27,13 @@ class CourseBuilderTest { .build(); log.info(course.toString()); } + + /** + * 不可变集合源码测试 + */ + @Test + void ImmutableSetBuild() { + Set set = ImmutableSet.builder().add("f").add("j").add("y").build(); + log.info(set.toString()); + } } \ No newline at end of file