以一种方法的两种数据库实现为例子.
第一种:抽象工厂
package com.wzs.three;
/**
* 大话设计模式--page128 抽象工厂
*
* @author Administrator
*
*/
public class AbstractFactory {
public static void main(String[] args) {
// IFactory factory = new SqlServerFactory();
IFactory factory = new AccessFactory();
User user = new User();
IUser iu = factory.createUser();
iu.insert(user);
iu.getUser(1);
Department department = new Department();
IDepartment id = factory.createDepartment();
id.insert(department);
id.getDepartment(1);
}
}
/*
* 用户
*/
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;
}
}
/*
* 部门
*/
class Department {
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;
}
}
/*
* 抽象工厂
*/
interface IFactory {
IUser createUser();
IDepartment createDepartment();
}
/*
* sql 工厂
*/
class SqlServerFactory implements IFactory {
@Override
public IUser createUser() {
return new SqlServerUser();
}
@Override
public IDepartment createDepartment() {
return new SqlServerDepartment();
}
}
/*
* access 工厂
*/
class AccessFactory implements IFactory {
@Override
public IUser createUser() {
return new AccessUser();
}
@Override
public IDepartment createDepartment() {
return new AccessDepartment();
}
}
/*
* 用户方法抽象接口
*/
interface IUser {
void insert(User user);
User getUser(int id);
}
/*
* sql用户方法
*/
class SqlServerUser implements IUser {
@Override
public User getUser(int id) {
System.out.println("在sql server中得到id=" + id + "的User记录.");
return null;
}
@Override
public void insert(User user) {
System.out.println("在sql server中插入User新记录.");
}
}
/*
* access用户方法
*/
class AccessUser implements IUser {
@Override
public User getUser(int id) {
System.out.println("在Access中得到id=" + id + "的User记录.");
return null;
}
@Override
public void insert(User user) {
System.out.println("在Access中插入新User记录.");
}
}
/*
* 部门抽象方法接口
*/
interface IDepartment {
void insert(Department department);
Department getDepartment(int id);
}
/*
* sql部门方法
*/
class SqlServerDepartment implements IDepartment {
@Override
public Department getDepartment(int id) {
System.out.println("在sql server中得到id=" + id + "的Department记录.");
return null;
}
@Override
public void insert(Department department) {
System.out.println("在sql server中插入新Department记录.");
}
}
/*
* access部门方法
*/
class AccessDepartment implements IDepartment {
@Override
public Department getDepartment(int id) {
System.out.println("在Access中得到id=" + id + "的Department记录.");
return null;
}
@Override
public void insert(Department department) {
System.out.println("在Access中插入新Department记录.");
}
}第二种:反射+抽象工厂
package com.wzs.two;
/**
* 大话设计模式--page128 反射+抽象工厂
*
* @author Administrator
*
*/
public class AbstractFactory {
public static void main(String[] args) throws InstantiationException, IllegalAccessException, ClassNotFoundException {
// IFactory factory = new SqlServerFactory();
User user = new User();
IUser iu = DataAccess.createUser();
iu.insert(user);
iu.getUser(1);
Department department = new Department();
IDepartment id = DataAccess.createDepartment();
id.insert(department);
id.getDepartment(1);
}
}
class DataAccess {
private static String db = "Access";
public static IUser createUser() throws InstantiationException, IllegalAccessException, ClassNotFoundException {
return (IUser) Class.forName("com.wzs.two." + db + "User").newInstance();
}
public static IDepartment createDepartment() throws InstantiationException, IllegalAccessException, ClassNotFoundException {
return (IDepartment) Class.forName("com.wzs.two." + db + "Department").newInstance();
}
}
class DataSqlServer {
private static String db = "SqlServer";
public static IUser createUser() throws InstantiationException, IllegalAccessException, ClassNotFoundException {
return (IUser) Class.forName("com.wzs.two." + db + "User").newInstance();
}
public static IDepartment createDepartment() throws InstantiationException, IllegalAccessException, ClassNotFoundException {
return (IDepartment) Class.forName("com.wzs.two." + db + "Department").newInstance();
}
}
/*
* 用户
*/
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;
}
}
/*
* 部门
*/
class Department {
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;
}
}
/*
* 用户方法抽象接口
*/
interface IUser {
void insert(User user);
User getUser(int id);
}
/*
* sql用户方法
*/
class SqlServerUser implements IUser {
@Override
public User getUser(int id) {
System.out.println("在sql server中得到id=" + id + "的User记录.");
return null;
}
@Override
public void insert(User user) {
System.out.println("在sql server中插入User新记录.");
}
}
/*
* access用户方法
*/
class AccessUser implements IUser {
@Override
public User getUser(int id) {
System.out.println("在Access中得到id=" + id + "的User记录.");
return null;
}
@Override
public void insert(User user) {
System.out.println("在Access中插入新User记录.");
}
}
/*
* 部门抽象方法接口
*/
interface IDepartment {
void insert(Department department);
Department getDepartment(int id);
}
/*
* sql部门方法
*/
class SqlServerDepartment implements IDepartment {
@Override
public Department getDepartment(int id) {
System.out.println("在sql server中得到id=" + id + "的Department记录.");
return null;
}
@Override
public void insert(Department department) {
System.out.println("在sql server中插入新Department记录.");
}
}
/*
* access部门方法
*/
class AccessDepartment implements IDepartment {
@Override
public Department getDepartment(int id) {
System.out.println("在Access中得到id=" + id + "的Department记录.");
return null;
}
@Override
public void insert(Department department) {
System.out.println("在Access中插入新Department记录.");
}
}
本文通过实例展示了如何利用抽象工厂模式和反射技术在不同的数据库系统间进行灵活的操作,具体包括用户和部门的增删查操作在SQL Server与Access数据库之间的实现。
2430





