工厂模式的核心其实就是通过一个工厂类来管理生产我们所需要的不同的对象,用于解决单个产品系列中对业务操作的拆分解耦,而今天学习的抽象工厂模式其实是一种特殊的工厂模式,用来解决涉及到多个产品系列的问题。我们借用《大话设计模式》中的例子来说明。
假如现在需要实现用户管理中获取用户信息的小功能,但是需要同时支持SQL server和Oracle两种数据库,做到尽量少的改动自如切换数据库,这时候就用到了我们抽象工厂模式。
首先有一个User实体类。
public class User {
private String userId;
private String userName;
// setter getter...
}
用户管理的接口
public interface UserMgmt {
public User getUserInfo();
}
针对SQL server的实现
public class UserMgmtSqlserver implements UserMgmt {
public User getUserInfo(){
User user = new User();
/*
从SQL server库中获取用户信息
*/
return user;
}
}
针对Oracle的实现
public class UserMgmtOracle implements UserMgmt{
public User getUserInfo(){
User user = new User();
/*
从Oracle库中获取用户信息
*/
return user;
}
}
工厂类接口
public abstract interface UserMgmtFactory {
//获取UserMgmt对象
public UserMgmt getUserMgmt();
}
管理针对SQL server的对象工厂
public class UserMgmtFactorySqlserver implements UserMgmtFactory{
public UserMgmt getUserMgmt(){
UserMgmt um = new UserMgmtSqlserver();
return um;
}
}
管理针对Oracle的对象工厂
public class UserMgmtFactoryOracle implements UserMgmtFactory{
public UserMgmt getUserMgmt(){
UserMgmt um = new UserMgmtOracle();
return um;
}
}
客户端方法
public class Main {
public static void main(String[] args){
//oracle
UserMgmtFactory uf = new UserMgmtFactoryOracle();
UserMgmt um = uf.getUserMgmt();
um.getUserInfo();
//sql server
// UserMgmtFactory uf = new UserMgmtFactorySqlserver();
// UserMgmt um = uf.getUserMgmt();
// um.getUserInfo();
}
}