1.定义
创建工厂的工厂。

2.优点
易于扩展不同的工厂和产品。

3.示例

public abstract class Video {
abstract void produce();
}
public class JavaVideo extends Video {

@Override
void produce() {
System.out.println("录制Java视频");
}
}
public class PythonVideo extends Video {
@Override
void produce() {
System.out.println("录制Python视频");
}
}
public abstract class Article {
abstract void produce();
}
public class JavaArticle extends Article {
@Override
void produce() {
System.out.println("编写Java手记");
}
}
public class PythonArticle extends Article {
@Override
void produce() {
System.out.println("编写Python手记");
}
}
public interface ICourseFactory {
Video getVideo();

Article getArticle();
}
public class JavaFactory implements ICourseFactory {
@Override
public Video getVideo() {
return new JavaVideo();
}

@Override
public Article getArticle() {
return new JavaArticle();
}
}
public class PythonFactory implements ICourseFactory {
@Override
public Video getVideo() {
return new PythonVideo();
}

@Override
public Article getArticle() {
return new PythonArticle();
}
}
public class Test {
public static void main(String[] args) {
ICourseFactory iCourseFactory = new JavaFactory();
Video video = iCourseFactory.getVideo();
video.produce();
Article article = iCourseFactory.getArticle();
article.produce();
}
}
录制Java视频
编写Java手记

2.6 抽象工厂_java

4.源码解析

public class DefaultSqlSessionFactory implements SqlSessionFactory {
private SqlSession openSessionFromDataSource(ExecutorType execType, TransactionIsolationLevel level, boolean autoCommit) {
Transaction tx = null;
try {
final Environment environment = configuration.getEnvironment();
final TransactionFactory transactionFactory = getTransactionFactoryFromEnvironment(environment);
tx = transactionFactory.newTransaction(environment.getDataSource(), level, autoCommit);
final Executor executor = configuration.newExecutor(tx, execType);
return new DefaultSqlSession(configuration, executor, autoCommit);
} catch (Exception e) {
closeTransaction(tx); // may have fetched a connection so lets call close()
throw ExceptionFactory.wrapException("Error opening session. Cause: " + e, e);
} finally {
ErrorContext.instance().reset();
}
}
}

2.6 抽象工厂_System_02