
Java设计模式-抽象工厂模式实现动态更换系统数据库
本文基于题目实现的代码较为基础且创建对象过程并没有优化,耦合度较高,仅供设计模式思路参考,若欲进一步优化可以引入Spring让Spring为我们完成创建对象和引入依赖的过程。以上代码若有错误还望不吝赐教...
·
抽象工厂模式概念:提供一个创建一系列或相互依赖对象的接口,而无需指定他们具体的类
抽象工厂模式中的角色
- 抽象角色
- 具体角色
- 抽象工厂
- 具体工厂
例题题目:某一系统为了改进数据库操作的性能,自定义数据库连接对象Connection和语句对象Statement,可针对不同类型的数据库提供不同的连接对象和语句对象,如提供Oracle或SQL Server专用连接类和语句类,而且用户可以通过主函数方式根据实际需要动态更换系统数据库。使用抽象工厂模式设计该系统。
类图:
代码实现:
一、DBFactory类(抽象工厂类):
package 抽象工厂模式;
public interface DBFactory {
public Connection createConnection();
public Statement createStatement();
}
二、MySqlFactory:
package 抽象工厂模式;
public class MySqlFactory implements DBFactory{
@Override
public Connection createConnection() {
return new MySqlConnection();
}
@Override
public Statement createStatement() {
return new MySqlStatement();
}
}
三、OracleFactory:
package 抽象工厂模式;
public class OracleFactory implements DBFactory{
@Override
public Connection createConnection() {
return new OracleConnection();
}
@Override
public Statement createStatement() {
return new OracleStatement();
}
}
四、Connection(连接类):
package 抽象工厂模式;
public interface Connection {
public void connect();
}
五、MySqlConnection类:
package 抽象工厂模式;
public class MySqlConnection implements Connection{
@Override
public void connect() {
System.out.println("连接到MySql数据库.........");
}
}
六、OracleConnection类:
package 抽象工厂模式;
public class OracleConnection implements Connection{
@Override
public void connect() {
System.out.println("连接到Oracle数据库.......");
}
}
七、Statement(状态类):
package 抽象工厂模式;
public interface Statement {
public void state();
}
八、MySqlStatement类:
package 抽象工厂模式;
public class MySqlStatement implements Statement{
@Override
public void state() {
System.out.println("执行MySql数据库操作语句");
}
}
九、OracleStatement类:
package 抽象工厂模式;
public class OracleStatement implements Statement{
@Override
public void state() {
System.out.println("执行Oracle数据库操作语句");
}
}
十、客户端:
package 抽象工厂模式;
import java.util.Scanner;
public class Client {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("输入您要链接的数据库类型(mysql/oracle)");
String DB = scanner.next();
if(DB.equals("mysql")) {
DBFactory factory1 = new MySqlFactory();
Connection connect1 = new MySqlConnection();
Statement state1 = new MySqlStatement();
connect1 = factory1.createConnection();
connect1.connect();
state1 = factory1.createStatement();
state1.state();
} else if (DB.equals("oracle")) {
DBFactory factory2 = new OracleFactory();
Connection connect2 = new OracleConnection();
Statement state2 = new OracleStatement();
connect2=factory2.createConnection();
connect2.connect();
state2=factory2.createStatement();
state2.state();
}else{
System.out.println("您输入的格式有误,请检查后重新输入!");
}
}
}
运行结果:
本文基于题目实现的代码较为基础且创建对象过程并没有优化,耦合度较高,仅供设计模式思路参考,若欲进一步优化可以引入Spring让Spring为我们完成创建对象和引入依赖的过程。以上代码若有错误还望不吝赐教...
更多推荐
所有评论(0)