设计模式之工厂模式
今天写一下对工厂模式的理解:你想要买一辆车,而你不需要去了解它的具体过程是什么,只需要获得它既可。工厂模式就是这样,你只要说出你想要的东西,我就给你生产它。就像数据库的连接一样,你不需要去知道它内部是怎样连接的,只要知道它的名字,系统就会给你一个它的连接。具体的应用如hibernate的sessionFactory,需要dataSource,而dataSource就是它生产时所需要的一个参数。如下配置:
<bean id="dataSource">
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.passwd}"/>
</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
</bean>
举一个数据库的例子,代码:
package com.model.factory;
public interface DataBase { //定义一个接口,即定义工厂产生对象的公共行为
public void insert();
public void delete();
public void update();
public void search();
}
package com.model.factory;
public class MySQL implements DataBase{ //定义工厂所能产生的一些数据库类型,并实现它们的公共行为
@Override
public void insert() {
System.out.println("MySQL增加数据");
}
@Override
public void delete() {
System.out.println("MySQL删除数据");
}
@Override
public void update() {
System.out.println("MySQL修改数据");
}
@Override
public void search() {
System.out.println("MySQL查询数据");
}
}
package com.model.factory;
public class Oracle implements DataBase{
@Override
public void insert() {
System.out.println("Oracle增加数据");
}
@Override
public void delete() {
System.out.println("Oracle删除数据");
}
@Override
public void update() {
System.out.println("Oracle修改数据");
}
@Override
public void search() {
System.out.println("Oracle查询数据");
}
}
package com.model.factory;
public class SQLServer implements DataBase{
@Override
public void insert() {
System.out.println("SQLServer增加数据");
}
@Override
public void delete() {
System.out.println("SQLServer删除数据");
}
@Override
public void update() {
System.out.println("SQLServer修改数据");
}
@Override
public void search() {
System.out.println("SQLServer查询数据");
}
}
package com.model.factory;
public class DataBaseFactory { //创建工厂类
public DataBase getDataBase(String type){ //定义一个方法,根据输入的名称产生相应的数据库对象
if(type==null) return null;
if(type.equalsIgnoreCase("MySQL")){
return new MySQL();
}
if(type.equalsIgnoreCase("Oracle")){
return new Oracle();
}
if(type.equalsIgnoreCase("SQLServer")){
return new SQLServer();
}
return null;
}
}
测试:
public static void main(String[] args){
DataBaseFactory factory=new DataBaseFactory();
DataBase base=factory.getDataBase("MySQL"); //传入你所需的数据库类型,工厂会为你自动创建好你所需的数据库对象
base.insert();
base.delete();
base.update();
base.search();
}
结果:
MySQL增加数据
MySQL删除数据
MySQL修改数据
MySQL查询数据