由于很多人对这种模式有偏见,认为它是有缺陷的,我要给他正个名:
它并不是一个真正的模式,但是也有他的应用场景,所谓不要拘泥于模式
作用:由一个工厂类负责一种产品对象的创建。把对象的使用和创建分开,便于集中管理。
优点:简单易懂
应用场景:不变的业务,因此并没有违背对修改关闭,因为不可能修改它;也没有违背对扩展开放,因为不可能扩展它。就算要修改和扩展它,也只是简单修改,简单扩展,这种场景下使用简单工厂还更容易定位应该在何处修改和扩展,更容易集中管理。
案例 mysql Connection
public class NonRegisteringDriver implements Driver {
public Connection connect(String url, Properties info) throws SQLException {
try {
try {
if (!ConnectionUrl.acceptsUrl(url)) {
return null;
} else {
ConnectionUrl conStr = ConnectionUrl.getConnectionUrlInstance(url, info);
switch(conStr.getType()) {
case SINGLE_CONNECTION:
return ConnectionImpl.getInstance(conStr.getMainHost());
case FAILOVER_CONNECTION:
case FAILOVER_DNS_SRV_CONNECTION:
return FailoverConnectionProxy.createProxyInstance(conStr);
case LOADBALANCE_CONNECTION:
case LOADBALANCE_DNS_SRV_CONNECTION:
return LoadBalancedConnectionProxy.createProxyInstance(conStr);
case REPLICATION_CONNECTION:
case REPLICATION_DNS_SRV_CONNECTION:
return ReplicationConnectionProxy.createProxyInstance(conStr);
default:
return null;
}
}
} catch (UnsupportedConnectionStringException var5) {
return null;
} catch (CJException var6) {
throw (UnableToConnectException)ExceptionFactory.createException(UnableToConnectException.class, Messages.getString("NonRegisteringDriver.17", new Object[]{var6.toString()}), var6);
}
} catch (CJException var7) {
throw SQLExceptionsMapping.translateException(var7);
}
}
}