抽象工厂模式
抽象工厂模式(Abstract Factory),提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
案例
类图:
class Department{
private int id;
private String deptName;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getDeptName() {
return deptName;
}
public void setDeptName(String deptName) {
this.deptName = deptName;
}
}
interface IDepartment
{
void insert(Department deparment);
Department getDepartment(int id);
}
//用于访问SQL Server中的Department
class SqlserverDepartment implements IDepartment{
@Override
public void insert(Department department) {
System.out.println("在SQL Server中给Department表增加一条记录");
}
@Override
public Department getDepartment(int id) {
System.out.println("在SQL Server中根据ID得到Department表一条记录");
return null;
}
}
//用于访问Access的Department
class AccessDepartment implements IDepartment{
@Override
public void insert(Department deparment) {
System.out.println("在Access中给Department表增加一条记录");
}
@Override
public Department getDepartment(int id) {
System.out.println("在Access中根据ID得到Department表一条记录");
return null;
}
}
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;
}
}
interface IUser{
public void insert(User user);
public User getUser(int id);
}
//用于访问SQL Server中的User
class SqlserverUser implements IUser{
@Override
public void insert(User user) {
System.out.println("在SQL Server中给User表增加一条记录");
}
@Override
public User getUser(int id) {
System.out.println("在SQL Server中根据ID得到User表一条记录");
return null;
}
}
//用于访问Access的User
class AccessUser implements IUser{
@Override
public void insert(User user) {
System.out.println("在Access中给User表增加一条记录");
}
@Override
public User getUser(int id) {
System.out.println("在Access中根据ID得到User表一条记录");
return null;
}
}
//定义创建访问User、Department表对象的抽象的工厂接口
interface IFactory1{
IUser createUser();
IDepartment createDepartment();
}
//实现IFactory1接口,实例化SqlserverUser和SqlserverDepartment
class SqlserverFactory implements IFactory1{
@Override
public IUser createUser() {
return new SqlserverUser();
}
@Override
public IDepartment createDepartment() {
return new SqlserverDepartment();
}
}
//实现IFactory1接口,实例化AccessUser和AccessDepartment
class AccessFactory implements IFactory1{
@Override
public IUser createUser() {
return new AccessUser();
}
@Override
public IDepartment createDepartment() {
return new AccessDepartment();
}
}
public class AbstractFactory {
public static void main(String[] args) {
User user = new User();
Department dept = new Department();
//只需确定实例化哪一个数据库访问对象给factory
IFactory1 factory = new SqlserverFactory();
//IFactory1 factory = new AccessFactory();
IUser iu = factory.createUser();
iu.insert(user);
iu.getUser(1);
IDepartment id = factory.createDepartment();
id.insert(dept);
id.getDepartment(1);
}
}