题目:
如果系统要求可支持多种数据库,并能方便的在多数据库之间切换,请用抽象工厂模式设计一个可支持多种数据库的数据库访问模块,并画出相应的类图?
类图:
代码:
class User{
private int userId;
private String userName;
public int getId() { return userId; }
public void setId(int userId) { this.userId = userId; }
public String getName() { return userName; }
public void setName(String userName) { this.userName = userName; }
}
class Department
{
private int deptId;
private int StaffNumber;
public int getId() { return deptId; }
public void setId(int deptId) { this.deptId = deptId; }
public int getStaffN() { return StaffNumber; }
public void setStaffN(int StaffNumber) { this.StaffNumber = StaffNumber; }
};
interface IUser
{
public void insert(User user);
public User getUser(int id);
};
class SqlserverUser implements IUser
{
public void insert(User user){
System.out.println("在Sql数据库中插入ID为:"+user.getId()+" 名字为:"+user.getName()+" 的一条用户记录");
}
public User getUser(int id){
System.out.println("在Sql数据库取出ID为:"+id+"的一条用户记录");
User user = new User();//这里user没有意义我们并没有从数据库中取数据,这里目的仅为满足返回值要求。
return user;
}
};
class AccessUser implements IUser
{
public void insert(User user){
System.out.println("在Access数据库中插入ID为:"+user.getId()+" 名字为:"+user.getName()+" 的一条用户记录");
}
public User getUser(int id){
System.out.println("在Access数据库取出ID为:"+id+"的一条User记录");
User user = new User();//这里user没有意义我们并没有从数据库中取数据,这里目的仅为满足返回值要求。
return user;
}
};
interface IDept
{
public void insert(Department dept);
public Department getDept(int id);
};
class SqlserverDept implements IDept
{
public void insert(Department dept){
System.out.println("在Sql数据库中插入ID为:"+dept.getId()+" 部门人数为:"+dept.getStaffN()+" 的一条部门记录");
}
public Department getDept(int id){
System.out.println("在Sql数据库取出ID为:"+id+"的一条部门记录");
Department dept = new Department(); //这里dept没有意义我们并没有从数据库中取数据,这里目的仅为满足返回值要求。
return dept;
}
};
class AccessDept implements IDept
{
public void insert(Department dept){
System.out.println("在Access数据库中插入ID为:"+dept.getId()+" 部门人数为:"+dept.getStaffN()+" 的一条部门记录");
}
public Department getDept(int id){
System.out.println("在Access数据库取出ID为:"+id+"的一条部门记录");
Department dept = new Department();//这里dept没有意义我们并没有从数据库中取数据,这里目的仅为满足返回值要求。
return dept;
}
};
interface IDateFactory
{
public IUser createUser();
public IDept createDept();
};
class SqlserverFactory implements IDateFactory
{
public IUser createUser(){
return new SqlserverUser();
}
public IDept createDept(){
return new SqlserverDept();
}
};
class AccessFactory implements IDateFactory
{
public IUser createUser(){
return new AccessUser();
}
public IDept createDept(){
return new AccessDept();
}
};
public class DataBase {
public static void main(String[] args){
User user = new User();
user.setId(1);
user.setName("小明");
Department dept = new Department();
dept.setId(1);
dept.setStaffN(20);
IDateFactory iDateFactory= new SqlserverFactory();
IUser iUser = iDateFactory.createUser();
iUser.insert(user);
iUser.getUser(1);
IDept iDept = iDateFactory.createDept();
iDept.insert(dept);
iDept.getDept(1);
}
}
结果: