定义:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类
结构图:
示例代码:
public class User {
}
public class Department {
}
public interface IUser {
void insert(User user);
User getUser(int id);
}
public interface IDepartment {
void insert(Department department);
Department getDepartment(int id);
}
public class MySqlUser implements IUser {
@Override
public void insert(User user) {
// TODO Auto-generated method stub
System.out.println("在mysql中给表user表添加一条记录!");
}
@Override
public User getUser(int id) {
// TODO Auto-generated method stub
System.out.println("在mysql中根据ID得到user表一条记录");
return null;
}
}
public class OracleUser implements IUser{
@Override
public void insert(User user) {
// TODO Auto-generated method stub
System.out.println("在Oracle中给表user表添加一条记录!");
}
@Override
public User getUser(int id) {
// TODO Auto-generated method stub
System.out.println("在Oracle中根据ID得到user表一条记录");
return null;
}
}
public class MySqlDepartment implements IDepartment{
@Override
public void insert(Department department) {
// TODO Auto-generated method stub
System.out.println("在mysql中给表department表添加一条记录!");
}
@Override
public Department getDepartment(int id) {
// TODO Auto-generated method stub
System.out.println("在mysql中根据ID得到Department表一条记录");
return null;
}
}
public class OracleDepartment implements IDepartment {
@Override
public void insert(Department department) {
// TODO Auto-generated method stub
System.out.println("在Oracle中给表department表添加一条记录!");
}
@Override
public Department getDepartment(int id) {
// TODO Auto-generated method stub
System.out.println("在Oracle中根据ID得到Department表一条记录");
return null;
}
}
public class MySqlFactory implements IFactory {
@Override
public IUser createUser() {
// TODO Auto-generated method stub
return new MySqlUser();
}
@Override
public IDepartment createDepartment() {
// TODO Auto-generated method stub
return new MySqlDepartment();
}
}
public class OracleFactory implements IFactory {
@Override
public IUser createUser() {
// TODO Auto-generated method stub
return new OracleUser();
}
@Override
public IDepartment createDepartment() {
// TODO Auto-generated method stub
return new OracleDepartment();
}
}
客户端代码如下所示:
public class Client {
public static void main(String[] args) {
IFactory mysqlFactory = new MySqlFactory();
IFactory oracleFactory = new OracleFactory();
IDepartment mysqlDepartment = mysqlFactory.createDepartment();
IUser mysqlUser = mysqlFactory.createUser();
mysqlDepartment.insert(null);
mysqlDepartment.getDepartment(0);
mysqlUser.insert(null);
mysqlUser.getUser(0);
IDepartment oracleDepartment = oracleFactory.createDepartment();
IUser oracleUser = oracleFactory.createUser();
oracleDepartment.insert(null);
oracleDepartment.getDepartment(0);
oracleUser.insert(null);
oracleUser.getUser(0);
}
}
运行结果如下:
在mysql中给表department表添加一条记录!
在mysql中根据ID得到Department表一条记录
在mysql中给表user表添加一条记录!
在mysql中根据ID得到user表一条记录
在Oracle中给表department表添加一条记录!
在Oracle中根据ID得到Department表一条记录
在Oracle中给表user表添加一条记录!
在Oracle中根据ID得到user表一条记录