話不多說,代碼如下:
package reflectAbstractFactory.user;
public class User {
private long id;
private String name;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package reflectAbstractFactory.user;
public interface IUser {
void insert(User user);
void getUser(int id);
}
package reflectAbstractFactory.user;
public class AccessUser implements IUser {
@Override
public void insert(User user) {
System.out.println("在Access數據庫的user表插入一條記錄");
}
@Override
public void getUser(int id) {
System.out.println("在Access數據庫的user表根據ID獲取一條記錄");
}
}
package reflectAbstractFactory.user;
public class SqlServerUser implements IUser {
@Override
public void insert(User user) {
System.out.println("在SqlServer數據庫的user表插入一條記錄");
}
@Override
public void getUser(int id) {
System.out.println("在SqlServer數據庫的user表根據ID獲取一條記錄");
}
}
package reflectAbstractFactory.dept;
public class Department {
private long id;
private String deptName;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getDeptName() {
return deptName;
}
public void setDeptName(String deptName) {
this.deptName = deptName;
}
}
package reflectAbstractFactory.dept;
public interface IDepartment {
void insert(Department dept);
void getDept(int id);
}
package reflectAbstractFactory.dept;
public class AccessDepartment implements IDepartment {
@Override
public void insert(Department dept) {
System.out.println("在Access數據庫的department表插入一條記錄");
}
@Override
public void getDept(int id) {
System.out.println("在Access數據庫的department表根據ID獲取一條記錄");
}
}
package reflectAbstractFactory.dept;
public class SqlServerDepartment implements IDepartment {
@Override
public void insert(Department dept) {
System.out.println("在SqlServer數據庫的department表插入一條記錄");
}
@Override
public void getDept(int id) {
System.out.println("在SqlServer數據庫的department表根據ID獲取一條記錄");
}
}
package reflectAbstractFactory;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.Iterator;
import java.util.Properties;
import reflectAbstractFactory.dept.IDepartment;
import reflectAbstractFactory.user.IUser;
public class ReflectSqlFactory {
public String getDb() {
Properties prop = new Properties();
String db = "";
try {
InputStream in = new BufferedInputStream(new FileInputStream(
"E:/sql.properties"));
prop.load(in);
Iterator<String> it = prop.stringPropertyNames().iterator();
while (it.hasNext()) {
String key = it.next();
if("db".endsWith(key)){
db = prop.getProperty("db");
break;
}
}
in.close();
} catch (Exception e) {
System.out.println(e);
}
return db;
}
public Class<?> getsqlFactory(String pge,String type) throws ClassNotFoundException{
String className= "reflectAbstractFactory."+pge+getDb()+type;
System.out.println(className);
Class<?> c1 = Class.forName(className);
System.out.println(c1.getName());
return c1;
}
public IUser createUser() throws InstantiationException, IllegalAccessException, ClassNotFoundException{
Class<?> c = getsqlFactory("user.","User");
IUser iu = (IUser)c.newInstance();
return iu;
};
public IDepartment createDept() throws ClassNotFoundException, InstantiationException, IllegalAccessException{
Class<?> c = getsqlFactory("dept.","Department");
IDepartment id = (IDepartment)c.newInstance();
return id;
};
}
package reflectAbstractFactory;
import reflectAbstractFactory.dept.Department;
import reflectAbstractFactory.dept.IDepartment;
import reflectAbstractFactory.user.IUser;
import reflectAbstractFactory.user.User;
public class Business {
public static void main(String[] args) throws InstantiationException, IllegalAccessException, ClassNotFoundException {
User user = new User();
ReflectSqlFactory reflectSqlFactory = new ReflectSqlFactory();
IUser iuDao = reflectSqlFactory.createUser();
iuDao.insert(user);
iuDao.getUser(1);
Department dept = new Department();
IDepartment idepatDao = reflectSqlFactory.createDept();
idepatDao.insert(dept);
idepatDao.getDept(1);
}
}