概述:
建造者模式与工厂模式都用于生产对象。
区别: 建造者模式用于生产比较复杂的对象,注重生成对象过程中的细节,可能最后创建对象的步骤依赖之前的准备工作。
工厂模式用于生成简单的对象,注重结果不注重过程。
打个比方:建造者模式是生产包子,在包出包子之前,需要准备馅儿、调味等前置工作,前置工作准备完成后最后是包包子。
工厂模式是生产馒头,简单快捷。
MyBatis中构造者模式的使用:
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
public class SqlSessionFactoryBuilder {
public SqlSessionFactory build(InputStream inputStream) {
return build(inputStream, null, null);
}
public SqlSessionFactory build(InputStream inputStream, String environment, Properties properties) {
try {
XMLConfigBuilder parser = new XMLConfigBuilder(inputStream, environment, properties);
//最后构建对象,依赖对配置文件的解析,解析完成后作为参数传递。
return build(parser.parse());
} catch (Exception e) {
throw ExceptionFactory.wrapException("Error building SqlSession.", e);
} finally {
ErrorContext.instance().reset();
try {
inputStream.close();
} catch (IOException e) {
// Intentionally ignore. Prefer previous error.
}
}
}
public SqlSessionFactory build(Configuration config) {
//构建对象,前置解析出的信息作为构造参数。
return new DefaultSqlSessionFactory(config);
}