工廠模式是一個用于執行個體化對象的模式,是用工廠方法代替new操作的一種方式。工廠模式在Java項目中到處都是,因為工廠模式就相當于建立執行個體對象的new,如在我們的系統中經常需要記日志,如果建立logger執行個體時所做的初始化工作可能是很長一段代碼,可能要初始化、指派、查詢資料等等,則會導緻代碼臃腫而難看。
private static Logger logger = LoggerFactory.getLogger(MyBusinessRPC.class);
public static Logger getLogger(String name) {
ILoggerFactory iLoggerFactory = getILoggerFactory();
return iLoggerFactory.getLogger(name);
}
public static ILoggerFactory getILoggerFactory() {
if (INITIALIZATION_STATE == UNINITIALIZED) {
INITIALIZATION_STATE = ONGOING_INITIALIZATION;
performInitialization();
}
switch (INITIALIZATION_STATE) {
case SUCCESSFUL_INITIALIZATION:
return StaticLoggerBinder.getSingleton().getLoggerFactory();
case NOP_FALLBACK_INITIALIZATION:
return NOP_FALLBACK_FACTORY;
case FAILED_INITIALIZATION:
throw new IllegalStateException(UNSUCCESSFUL_INIT_MSG);
case ONGOING_INITIALIZATION:
// support re-entrant behavior.
// See also http://bugzilla.slf4j.org/show_bug.cgi?id=106
return TEMP_FACTORY;
}
throw new IllegalStateException("Unreachable code");
}
在java web項目開發過程中,經常會看到如下配置檔案:
bean的name屬性sqlSessionFactory,我們知道Sqlsession對應着一次資料庫會話。由于資料庫回話不是永久的,是以Sqlsession的生命周期也不應該是永久的,相反,在你每次通路資料庫時都需要建立它(當然并不是說在Sqlsession裡隻能執行一次sql,你可以執行多次,當一旦關閉了Sqlsession就需要重新建立它)。建立Sqlsession的地方隻有一個,那就是SqlsessionFactory的openSession方法,這裡也用到了工廠模式。