

产品等级结构和产品族结构示意图如下:


//user表
public class User {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
//department表
public class Department {
private int id;
private String department_name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getDepartment_name() {
return department_name;
}
public void setDepartment_name(String department_name) {
this.department_name = department_name;
}
}
定义AbstractProductA和 AbstractProductB
public interface IUser {
void insert(User user);
}
public interface IDepartment {
void insert(Department department);
}
创建具体类
//sql
class SQLServerUser implements IUser {
@Override
public void insert(User user) {
System.out.println("在SQL Server中给User表加一条记录");
}
}
class AccessUser implements IUser{
@Override
public void insert(User user) {
System.out.println("在Access 中给User表加一条记录");
}
}
class SQLServerDepartment implements IDepartment {
@Override
public void insert(Department department) {
System.out.println("在SQL Server中给department 表加一条记录");
}
}
class AccessDepartment implements IDepartment{
@Override
public void insert(Department department) {
System.out.println("在Access 中给department表加一条记录");
}
}
创建抽象⼯⼚接⼝
public interface IFactory {
IUser createUser();
IDepartment createDepartment();
}
具体工厂
class SQLServerFactory implements IFactory{
@Override
public IUser createUser() {
return new SQLServerUser();
}
@Override
public IDepartment createDepartment() {
return new SQLServerDepartment();
}
}
class AccessFactory implements IFactory{
@Override
public IUser createUser() {
return new AccessUser();
}
@Override
public IDepartment createDepartment() {
return new AccessDepartment();
}
public static void main(String[] args) {
User user = new User();
IFactory factory = new SQLServerFactory();
IUser iu = factory.createUser();
iu.insert(user);
}
public class DataAccess {
public static IUser getUser(String server) {
try {
//获取Class对象
Class<?> sql_server = Class.forName("设计模式.抽象工厂与反射." + server +"User");
//new SQLServerUser();
Constructor<?> con = sql_server.getDeclaredConstructor();
return (IUser) con.newInstance();
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public static IDepartment getDepartment(String server){
try {
//获取Class对象
Class<?> sql_server = Class.forName("设计模式.抽象工厂与反射." + server +"Department");
//new SQLServerUser();
Constructor<?> con = sql_server.getDeclaredConstructor();
return (IDepartment) con.newInstance();
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
public static void main(String[] args) {
User user = new User();
Scanner sc = new Scanner(System.in);
System.out.println("请输入数据库:");
String server = sc.next();
IUser iUser = DataAccess.getUser(server);
iUser.insert(user);
}