《大话设计模式》Java代码示例(十一)之抽象工厂模式
抽象工厂模式(Abstract Factory):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
package abstractfactory;
/**
* 抽象工厂方法(Abstract Factory)
* 用户实体类
*/
public class User {
// ...
}
package abstractfactory;
/**
* 抽象工厂方法(Abstract Factory)
* 部门实体类
*/
public class Department {
// ...
}
package abstractfactory;
/**
* 抽象工厂方法(Abstract Factory)
* 用户接口
*/
public interface IUser {
void insert(User user);
User getUser(int id);
}
package abstractfactory;
/**
* 抽象工厂方法(Abstract Factory)
* SqlServerUser,用于访问SQL Server的User
*/
public 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;
}
}
package abstractfactory;
/**
* 抽象工厂方法(Abstract Factory)
* AccessUser,用于访问Access的User
*/
public class AccessUser implements IUser {
@Override
public void insert(User user) {
System.out.println("在Access中给用户表增加一条记录");
}
@Override
public User getUser(int id) {
System.out.println("在Access中根据ID得到用户表中的一条记录");
return null;
}
}
package abstractfactory;
/**
* 抽象工厂方法(Abstract Factory)
* 部门接口
*/
public interface IDepartment {
void insert(Department department);
Department getDepartment(int id);
}
package abstractfactory;
/**
* 抽象工厂方法(Abstract Factory)
* SqlServerDepartment,用于访问SQL Server的Department
*/
public 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;
}
}
package abstractfactory;
/**
* 抽象工厂方法(Abstract Factory)
* AccessDepartment,用于访问Access的Department
*/
public class AccessDepartment implements IDepartment {
@Override
public void insert(Department department) {
System.out.println("在Access中给部门表增加一条记录");
}
@Override
public Department getDepartment(int id) {
System.out.println("在Access中根据ID得到部门表中的一条记录");
return null;
}
}
package abstractfactory;
/**
* 抽象工厂方法(Abstract Factory)
* DataAccess,用简单工厂模式实现
*/
public class DataAccess {
private static final String DB = "SQLSERVER";
// private static final String DB = "ACCESS";
public static IUser createUser() {
IUser result = null;
switch (DB) {
case "SQLSERVER":
result = new SqlServerUser();
break;
case "ACCESS":
result = new AccessUser();
break;
}
return result;
}
public static IDepartment createDepartment() {
IDepartment result = null;
switch (DB) {
case "SQLSERVER":
result = new SqlServerDepartment();
break;
case "ACCESS":
result = new AccessDepartment();
break;
}
return result;
}
}
package abstractfactory;
/**
* 抽象工厂方法(Abstract Factory)
* 客户端main方法
*/
public class Client {
public static void main(String[] args) {
User user = new User();
Department dept = new Department();
IUser iUser = DataAccess.createUser();
iUser.insert(user);
iUser.getUser(1);
IDepartment iDepartment = DataAccess.createDepartment();
iDepartment.insert(dept);
iDepartment.getDepartment(2);
}
}