由hibernate中学习工厂模式

有两种形式,工厂方法和抽象工厂:
工厂方法:
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出的就是不同的皮肤主题(青春工厂:青春按钮,青春标题栏,青春边框&&成熟工厂:成熟按钮,成熟标题栏,成熟边框)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值