1.引子
在很多开发过程中,我们会遇到很多的特定范列,或者范式,个人归结于是一种范式,一种业务模型,用于解决特定的问题和场景.
2.下面以简单工厂模式为列谈谈个人的理解,以连接数据库为列子,我们在很多时候,要连接不同数据库,如mysql,oracle,sqlserver等数据库,这其中我们有一个固有动作,那就是创建连接对象,然后进行对其数据库操作,我把这个创建连接对象的过程作为一种特定动作或者说范列抽取出来。,比如说我今天切换了数据库,客服端只需通知服务器切换数据库类型即可获得数据库连接对象,进行数据库业务模型操作。
简单工厂模式包括三个模型:
v1.抽象角色产品(一般泛指抽象类或者是接口)
v.具体产品(普通类,继承或者实现抽象类或者接口即抽象角色产品)
v3.工厂类(普通类,用于具体生产具体的产品,是简单工厂模式的核心)
介绍了这么些,那我们实践一下.
3.代码部分
v.1抽象产品角色
/**
* 简单工厂模式
* 抽象产品角色 ,以连接数据库为模型
*
*
*/
public interface ConnectionFactory {
/**
* 获取连接对象
*/
public void getConnection();
}
v.2具体产品
/**
* 具体产品类
* 继承实现抽象产品角色,类型是抽象类或者是接口
*
*/
public class MySqlConnection implements ConnectionFactory {
protected Log log = LogFactory.getLog(this.getClass());
public void getConnection() {
log.info("=====mysql连接数据库=====");
}
}
/**
* 具体产品类
* 继承实现抽象产品角色,类型是抽象类或者是接口
*
*/
public class OracelConnection implements ConnectionFactory {
protected Log log=LogFactory.getLog(this.getClass());
public void getConnection() {
log.info("=====oracel连接数据库=====");
}
}
/**
* 具体产品类
* 继承实现抽象产品角色,类型是抽象类或者是接口
*
*/
public class SqlServerFactory implements ConnectionFactory {
protected Log log=LogFactory.getLog(this.getClass());
public void getConnection() {
log.info("====sqlServer连接数据库=======");
}
}
v.3工厂类
/**
* 简单工厂类
*
*
*/
public class DataConnection {
protected static ConnectionFactory conn = null;
public static ConnectionFactory getConnection(String connStr)
throws Exception {
if (connStr.equals("MySql")) {
conn = new MySqlConnection();
} else if (connStr.equals("Oracel")) {
conn = new OracelConnection();
} else if (connStr.equals("SqlServer")) {
conn = new SqlServerFactory();
} else
throw new Exception();
return conn;
}
}
}
一切就绪,我们测试,来获取连接对象
v.4 测试类
public class TestFactory {
/**
* @param args
*/
public static void main(String[] args) throws Exception{
ConnectionFactory conn=DataConnection.getConnection("MySql"); //创建mysql连接对象
conn.getConnection(); //获取连接对象
ConnectionFactory conn1=DataConnection.getConnection("Oracel"); //创建Oracel连接对象
conn1.getConnection(); //获取连接对象
ConnectionFactory conn2=DataConnection.getConnection("SqlServer"); //创建SqlServer连接对象
conn2.getConnection(); //获取连接对象
}
}
测试结果
这样,我们就能实现切数据库连接,避免客户端创建连接实列。
当然,简单工厂模式只能处理简单业务模型,如果试想一下,我们如果存在很多的数据库连接,那我们的工厂类就要写很多判断,这在java中不是符合规范的,下一章介绍工厂模式。