设计模式课程 设计模式精讲 7-3 建造者模式源码解析(jdk+guava+spring+mybaties)
2024-09-03 00:32:05
1 源码解析
1.1 jdk解析
1.2 guava解析
1.3 spring解析
1.4 mybaties解析
1 源码解析
1.1 jdk解析
String
public StringBuilder append(boolean b) {
super.append(b);
return this;
} public StringBuilder append(char c) {
super.append(c);
return this;
} public StringBuilder append(int i) {
super.append(i);
return this;
} public StringBuilder append(long lng) {
super.append(lng);
return this;
} public StringBuilder append(float f) {
super.append(f);
return this;
} public StringBuilder append(double d) {
super.append(d);
return this;
}
StringBuilder
public synchronized StringBuffer append(Object obj) {
super.append(String.valueOf(obj));
return this;
} public synchronized StringBuffer append(String str) {
super.append(str);
return this;
}
1.2 guava解析(ImmutableSet)
copyOf方法
public static <E> ImmutableSet<E> copyOf(Collection<? extends E> elements) {
if (elements instanceof ImmutableSet && !(elements instanceof ImmutableSortedSet)) {
ImmutableSet<E> set = (ImmutableSet)elements;
if (!set.isPartialView()) {
return set;
}
} else if (elements instanceof EnumSet) {
return copyOfEnumSet((EnumSet)elements);
} Object[] array = elements.toArray();
return construct(array.length, array);
}
Of方法
public static <E> ImmutableSet<E> of() {
return RegularImmutableSet.EMPTY;
} public static <E> ImmutableSet<E> of(E element) {
return new SingletonImmutableSet(element);
} public static <E> ImmutableSet<E> of(E e1, E e2) {
return construct(2, e1, e2);
} public static <E> ImmutableSet<E> of(E e1, E e2, E e3) {
return construct(3, e1, e2, e3);
} public static <E> ImmutableSet<E> of(E e1, E e2, E e3, E e4) {
return construct(4, e1, e2, e3, e4);
} public static <E> ImmutableSet<E> of(E e1, E e2, E e3, E e4, E e5) {
return construct(5, e1, e2, e3, e4, e5);
}
add方法(注意静态内部类)
@CanIgnoreReturnValue
public ImmutableSet.Builder<E> add(E element) {
super.add(element);
return this;
} public static class Builder<E> extends ArrayBasedBuilder<E> {
public Builder() {
this(4);
} Builder(int capacity) {
super(capacity);
} @CanIgnoreReturnValue
public ImmutableSet.Builder<E> add(E element) {
super.add(element);
return this;
} @CanIgnoreReturnValue
public ImmutableSet.Builder<E> add(E... elements) {
super.add(elements);
return this;
} @CanIgnoreReturnValue
public ImmutableSet.Builder<E> addAll(Iterable<? extends E> elements) {
super.addAll(elements);
return this;
} @CanIgnoreReturnValue
public ImmutableSet.Builder<E> addAll(Iterator<? extends E> elements) {
super.addAll(elements);
return this;
} public ImmutableSet<E> build() {
ImmutableSet<E> result = ImmutableSet.construct(this.size, this.contents);
this.size = result.size();
return result;
}
1.3 spring解析
BeanDefinitionBuilder类
public static BeanDefinitionBuilder genericBeanDefinition() {
BeanDefinitionBuilder builder = new BeanDefinitionBuilder();
builder.beanDefinition = new GenericBeanDefinition();
return builder;
}
1.4 mybaties解析
SqlSessionFactoryBuilder类(建造者模式中再使用建造者)
解析xml过程
public SqlSessionFactory build(Reader reader, String environment, Properties properties) {
SqlSessionFactory var5;
try {
XMLConfigBuilder parser = new XMLConfigBuilder(reader, environment, properties);
var5 = this.build(parser.parse());
} catch (Exception var14) {
throw ExceptionFactory.wrapException("Error building SqlSession.", var14);
} finally {
ErrorContext.instance().reset(); try {
reader.close();
} catch (IOException var13) {
;
} } return var5;
}
XMLConfigBuilder类
public Configuration parse() {
if (parsed) {
throw new BuilderException("Each XMLConfigBuilder can only be used once.");
}
parsed = true;
parseConfiguration(parser.evalNode("/configuration"));
return configuration;
} private void parseConfiguration(XNode root) {
try {
Properties settings = settingsAsPropertiess(root.evalNode("settings"));
//issue #117 read properties first
propertiesElement(root.evalNode("properties"));
loadCustomVfs(settings);
typeAliasesElement(root.evalNode("typeAliases"));
pluginElement(root.evalNode("plugins"));
objectFactoryElement(root.evalNode("objectFactory"));
objectWrapperFactoryElement(root.evalNode("objectWrapperFactory"));
reflectorFactoryElement(root.evalNode("reflectorFactory"));
settingsElement(settings);
// read it after objectFactory and objectWrapperFactory issue #631
environmentsElement(root.evalNode("environments"));
databaseIdProviderElement(root.evalNode("databaseIdProvider"));
typeHandlerElement(root.evalNode("typeHandlers"));
mapperElement(root.evalNode("mappers"));
} catch (Exception e) {
throw new BuilderException("Error parsing SQL Mapper Configuration. Cause: " + e, e);
}
}
最新文章
- QT学习第1天
- Untiy3D - 窗口界面1
- Android单元测试
- Web压力测试 ApacheBench(ab)
- jQuery中 end(); 的用法
- L2-010. 排座位
- @media max-width 与jquery宽度取值的差异
- pandas 按照列A分组,将同一组的列B求和,生成新的Dataframe
- 实验吧_貌似有点难(php代码审计)&;头有点大
- CentOS 7 Nginx1.12.2平滑升级到新版本nginx-1.13.3
- 理解 OAuth2.0
- 在Linq to sql 和 Entity framework 中使用lambda表达式实现left join
- 深入浅出 1 - AI量化策略快速理解
- 浅读官方代码--ActionManager
- Linux安装命令出现如下错误:cannot find a valid baseurl for repo :base/7x86_64
- Memcached 简单利用和简单了解(Mac的安装和使用)
- 用编程方式编写Babylon格式的宇宙飞船3D模型
- Daily Scrum7 11.11
- (基于Jenkins + SVN + Ant + Weblogic Server的)应用程序自动(/一键)部署的设想
- 使用Visual Studio将C#生成DLL文件的方法