// 简单工厂改进public class DataSimpleFactory { public static String db = ""; public static IUser CreateUser() { IUser result = null; switch (db) { case "SqlServer": result = new SqlServerUser(); break; case "Access": result = new AccessUser(); break; } return result; }}// 反射public class DataSQLServerReflection { private static final String db = "SqlServer"; public static IUser CreateUser() throws InstantiationException, IllegalAccessException, ClassNotFoundException{ return (IUser) Class.forName("com.design.eleven.database.abstractfactory.improve."+db+"User").newInstance(); } public static IDepartment CreateDepartment() throws InstantiationException, IllegalAccessException, ClassNotFoundException{ return (IDepartment) Class.forName("com.design.eleven.database.abstractfactory.improve."+db+"Department").newInstance(); }}public class DataAccessReflection { private static final String db = "Access"; public static IUser CreateUser() throws InstantiationException, IllegalAccessException, ClassNotFoundException{ return (IUser) Class.forName("com.design.eleven.database.abstractfactory.improve."+db+"User").newInstance(); } public static IDepartment CreateDepartment() throws InstantiationException, IllegalAccessException, ClassNotFoundException{ return (IDepartment) Class.forName("com.design.eleven.database.abstractfactory.improve."+db+"Department").newInstance(); }}public class Test { public static void main(String[] args) throws InstantiationException, IllegalAccessException, ClassNotFoundException { System.out.println("---------使用简单工厂-----------"); User user =new User(); Department department =new Department(); // SQL DataSimpleFactory.db = "SqlServer"; IUser iUser=DataSimpleFactory.CreateUser(); iUser.Insert(user); iUser.GetUser(1); // Access DataSimpleFactory.db = "Access"; IUser iUser1=DataSimpleFactory.CreateUser(); iUser1.Insert(user); iUser1.GetUser(1); System.out.println("----------使用反射,实例化完返回一个可操作对象------------"); // SQL IUser createUser1 = DataSQLServerReflection.CreateUser(); IDepartment createDepartment1 = DataSQLServerReflection.CreateDepartment(); createUser1.Insert(user); createUser1.GetUser(1); createDepartment1.Insert(department); createDepartment1.GetDepartment(1); // Access IUser createUser = DataAccessReflection.CreateUser(); IDepartment createDepartment = DataAccessReflection.CreateDepartment(); createUser.Insert(user); createUser.GetUser(1); createDepartment.Insert(department); createDepartment.GetDepartment(1); }}