抽象工厂模式

抽象工厂模式

    • 问题描述
    • 代码

问题描述

利用抽象工厂模式实现不同数据库连接

代码

package com.lexie.abstractFactory;


import java.sql.Connection;

public interface DBConnection {
	public Connection getConnection();
}

package com.lexie.abstractFactory;


import java.sql.SQLException;

public interface DBFactory {
	public DBConnection createConnection() throws SQLException;
	public DBStatement createStatement() throws SQLException;
}

package com.lexie.abstractFactory;


import java.sql.SQLException;
import java.sql.Statement;

public interface DBStatement {
	public Statement getStatement() throws SQLException;
}

package com.lexie.abstractFactory;


import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class MySQLConnection implements DBConnection{
	private static final String USERNAME = "root";
	private static final String PASSWORD = "root";
	private static final String DRIVER = "com.mysql.jdbc.Driver";
	private static final String URL = "jdbc:mysql://localhost:3306/jdbc?useSSL=true&serverTimezone=UTC";
	public MySQLConnection() {

	}
	public Connection getConnection() {
		// TODO Auto-generated method stub
		//注册驱动
				try {
					Class.forName(DRIVER);		
				}catch(ClassNotFoundException e) {
					e.printStackTrace();
				}
				//获取数据库连接
				try {
					Connection conn = DriverManager.getConnection(URL,USERNAME,PASSWORD);
					System.out.println("MysqlConnection 创建成功!");
					return conn;
				}catch(SQLException e) {
					e.printStackTrace();
				}
				return null;
	}
	
}
package com.lexie.abstractFactory;


import java.sql.SQLException;

public class MySQLFactory implements DBFactory{

	public DBConnection createConnection() throws SQLException{
	
		return new MySQLConnection();
	}

	public DBStatement createStatement() throws SQLException {
		
		return new MySQLStatement();
	}

}
package com.lexie.abstractFactory;


import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;

public class MySQLStatement implements DBStatement{
	
	public Statement getStatement() throws SQLException {
		// TODO Auto-generated method stub
		Statement sm;
		MySQLConnection mc= new MySQLConnection();
		Connection conn= mc.getConnection();
		sm = conn.createStatement();
		System.out.println("MysqlStatment 创建成功!");
		return sm;
	}

}
package com.lexie.abstractFactory;


import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class OracleConnection implements DBConnection{
	public Connection getConnection() {
		// TODO Auto-generated method stub
	
		System.out.println("OracleConnection 创建成功!");
				
		return null;
	}
}

package com.lexie.abstractFactory;


import java.sql.SQLException;

public class OracleFactory implements DBFactory{
	public DBConnection createConnection() throws SQLException{
		
		return new OracleConnection();
	}

	public DBStatement createStatement() throws SQLException {
		
		return new OracleStatement();
	}
}

package com.lexie.abstractFactory;

import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;

public class OracleStatement implements DBStatement{
	public Statement getStatement() throws SQLException {
		// TODO Auto-generated method stub
		System.out.println("OracleStatment 创建成功!");
		return null;
	}
}

package com.lexie.abstractFactory;

import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;

public class test {
	public static void main(String args[]) throws SQLException {
		DBFactory factory;
		DBConnection DBConn;
		DBStatement DBSm;
		Connection conn;
		Statement sm;
		factory = (DBFactory)XMLUtil.getBean();
		DBConn = factory.createConnection();
		DBConn.getConnection();
		
		DBSm = factory.createStatement();
		DBSm.getStatement();
		
	}
	
	
}
package com.lexie.abstractFactory;

import java.io.*;
import javax.xml.parsers.*;
import org.w3c.dom.*;

public class XMLUtil {
	public static Object getBean() {
		try {
			DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance();
			DocumentBuilder bulider = dFactory.newDocumentBuilder();
			Document doc;
			doc = bulider.parse(new File("config.xml"));
			
			NodeList nl = doc.getElementsByTagName("className");
			Node classNode = nl.item(0).getFirstChild();
			String cName = classNode.getNodeValue();
			
			Class c = Class.forName(cName);
			Object obj = c.newInstance();
			return obj;
		}catch(Exception e) {
			e.printStackTrace();
			return null;
		}
	}
}

<?xml version="1.0"?>
<config>
	<className>com.lexie.abstractFactory.MySQLFactory</className>
</config>

你可能感兴趣的:(设计模式,抽象工厂模式)