有两种形式,工厂方法和抽象工厂:
工厂方法:
某一类工厂有一系列的产品,各个工厂生产不同的系列(nike和adidas都生产衣服,鞋,球),通过不同的具体工厂new出不同的系列产品(nike工厂new出的是nike衣服,nike鞋,nike球),例如在软件的皮肤功能中,通过更改具体的皮肤工厂,程序中new出的就是不同的皮肤主题(青春工厂:青春按钮,青春标题栏,青春边框&&成熟工厂:成熟按钮,成熟标题栏,成熟边框)
工厂方法:
protected ConnectionProvider createConnectionProvider(Properties properties) {
//利用工厂方法产生一个新实例,properties是读取配置文件后生成存储在内存的属性对
return ConnectionProviderFactory.newConnectionProvider(properties);}
具体的工厂方法
public static ConnectionProvider newConnectionProvider(Properties properties)
throws HibernateException {
ConnectionProvider connections;
//根据配置的内容(而不是写死在代码中),生成新的实例
String providerClass = properties.getProperty( Environment.CONNECTION_PROVIDER );
if ( providerClass != null ) {
connections = initializeConnectionProviderFromConfig( providerClass );
}
else if ( c3p0ConfigDefined( properties ) && c3p0ProviderPresent() ) {
connections = initializeConnectionProviderFromConfig("org.hibernate.connection.C3P0ConnectionProvider");
}
else if ( properties.getProperty( Environment.DATASOURCE ) != null ) {
connections = new DatasourceConnectionProvider();
}
else if ( properties.getProperty( Environment.URL ) != null ) {
connections = new DriverManagerConnectionProvider();
}
else {
connections = new UserSuppliedConnectionProvider();
}
//利用properties,对新生成的实例进行初始化
connections.configure( properties );
return connections;
}
总结:灵活多变,代码未写死,可以在配置文件中灵活改变具体内容,并且在生成对象时进行框架逻辑上的控制。满足了生成实例对象多样化的同时还达到了对一类对象的初始化时的灵活性
某一类工厂有一系列的产品,各个工厂生产不同的系列(nike和adidas都生产衣服,鞋,球),通过不同的具体工厂new出不同的系列产品(nike工厂new出的是nike衣服,nike鞋,nike球),例如在软件的皮肤功能中,通过更改具体的皮肤工厂,程序中new出的就是不同的皮肤主题(青春工厂:青春按钮,青春标题栏,青春边框&&成熟工厂:成熟按钮,成熟标题栏,成熟边框)