一、概述:
1、提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。
2、结构图:
3、举例代码:
(1) 实体:
public interface IUser {
    public void insert(User user);
    public User getUser(int id);
}
public interface IDepartment {
    public void insert(Department department);
    public Department getDepartment(int id);
}
(2) SqlServer访问对象:
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;
    }
}
(3)Access访问对象
public class AccessDepartment implements IDepartment{
    @Override
    public void insert(Department department) {
        System.out.println("在Access中给Department表增加一条记录");
    }
    @Override
    public Department getDepartment(int id) {
        System.out.println("在Access中根据用户Id得到Department表一条记录");
        return null;
    }
}
(4)工厂接口
public interface IFactory {
    public IUser createUser();
    public IDepartment createDepartment();
}
(5)工厂类:
public class SqlserverFactory implements IFactory{
    @Override
    public IUser createUser() {
        return new SqlserverUser();
    }
    @Override
    public IDepartment createDepartment() {
        return new SqlserverDepartment();
    }
}
public class AccessFactory implements IFactory{
    @Override
    public IUser createUser() {
        return new AccessUser();
    }
    @Override
    public IDepartment createDepartment() {
        return new AccessDepartment();
    }
}
(6)客户端:
	User user = new User();
    Department department = new Department();
    IFactory factory = new SqlserverFactory();
  	//IFactory factory = new AccessFactory();
    IUser iu = factory.createUser();
    iu.insert(user);
    iu.getUser(1);
    IDepartment idept = factory.createDepartment();
   	idept.insert(department);
    idept.getDepartment(1);
输出:
在Sql Server中给User表增加一条记录
在Sql Server中根据用户Id得到User表一条记录
在Sql Server中给Department表增加一条记录
在Sql Server中根据部门Id得到Department表一条记录
4、比较:
工厂模式中,重要的是工厂类,而不是产品类。返回的实例一定是工厂创建的,而不是从其他对象中获取的。区别:
简单工厂 : 用来生产同一等级结构中的任意产品。(对于增加新的产品,无能为力);
工厂方法 :用来生产同一等级结构中的固定产品。(支持增加任意产品)   ;
 抽象工厂 :用来生产不同产品族的全部产品。(对于增加新的产品,无能为力;支持增加产品族)  。



















