工厂模式有3种,简单工厂模式,工厂方法模式和抽象工厂模式。其中简单工厂模式不属于23中GOF模式中的一种。简单工厂模式和工厂方法模式的区别在于工厂方法模式 将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口。这样在修改产品的时候不会在工厂类上面进行代码修改,符合开闭原则。工厂方法模式和抽象工厂模式的区别是,抽象工厂模式在工厂接口里面可以定义多个产品。
简单工厂模式详解
工厂方法模式详解(另附简单工厂的死亡之路)
抽象工厂模式详解
使用场景:
工厂模式是一个用于实例化对象的模式,是用工厂方法代替new操作的一种方式。工厂模式在Java项目中到处都是,因为工厂模式就相当于创建实例对象的new,如在我们的系统中经常需要记日志,如果创建logger实例时所做的初始化工作可能是很长一段代码,可能要初始化、赋值、查询数据等等,则会导致代码臃肿而难看。
在java web项目开发过程中,经常会看到如下配置文件:
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="mapperLocations" value="classpath*:com/**/*Mapper*.xml" /> <property name="dataSource" ref="dataSource" /> <property name="typeAliasesPackage" value="com.alibaba.***.dal" /> </bean>
bean的name属性sqlSessionFactory,我们知道Sqlsession对应着一次数据库会话。由于数据库回话不是永久的,因此Sqlsession的生命周期也不应该是永久的,相反,在你每次访问数据库时都需要创建它(当然并不是说在Sqlsession里只能执行一次sql,你可以执行多次,当一旦关闭了Sqlsession就需要重新创建它)。创建Sqlsession的地方只有一个,那就是SqlsessionFactory的openSession方法,这里也用到了工厂模式。