一、定义
提供一个创建一系列相关或者相互依赖对象的接口,而无需指定他们具体的类。
二、结构图
三、代码示例
1、user及user操作类 User.java
/**
* 用户类
* @author lattice
*
*/
public class User{
private String id;
private String name;
public void setId(String id){
this.id=id;
}
public String getId(){
return this.id;
}
public void setName(String name){
this.name=name;
}
public String getName(){
return this.name;
}
}
/**
* 用户操作接口
* @author lattice
*
*/
interface DaoUser{
public void insert(User user);
public void getUser(String name);
}
/**
* sqlserver操作user
* @author lattice
*
*/
class SqlServerUser implements DaoUser{
public void insert(User user){
System.out.println("sql server 新增 user:name="+user.getName());
}
public void getUser(String name){
System.out.println("sql server 通过name="+name+"查询user");
}
}
/**
* access操作user
* @author lattice
*
*/
class AccessUser implements DaoUser{
public void insert(User user){
System.out.println("access 新增 user:name="+user.getName());
}
public void getUser(String name){
System.out.println("access server 通过name="+name+"查询user");
}
}
2、department及department操作类 Departmment.java
/**
* 部门表department
* @author lattice
*
*/
public class Department{
private String id;
private String name;
public void setId(String id){
this.id=id;
}
public String getId(){
return this.id;
}
public void setName(String name){
this.name=name;
}
public String getName(){
return this.name;
}
}
/**
* 部门操作接口
* @author lattice
*
*/
interface DaoDepartment{
public void insert(Department department);
public void getDepartment(String name);
}
/**
* sqlserver操作department
* @author lattice
*
*/
class SqlServerDepartment implements DaoDepartment{
public void insert(Department department){
System.out.println("sql server 新增 Department:name="+department.getName());
}
public void getDepartment(String name){
System.out.println("sql server 通过name="+name+"查询Department");
}
}
/**
* access操作department
* @author lattice
*
*/
class AccessDepartment implements DaoDepartment{
public void insert(Department department){
System.out.println("access 新增 Department:name="+department.getName());
}
public void getDepartment(String name){
System.out.println("access 通过name="+name+"查询Department");
}
}
3、简单工厂模式类 DataAccess.java
/**
* 使用简单工厂方法改进抽象工厂
* @author lattice
*
*/
public class DataAccess {
private static final String db = "access";
//private static final String db = "sqlserver";
public static DaoUser createUser() {
DaoUser result = null;
switch (db) {
case "access": {
result = new AccessUser();
}
break;
case "sqlserver": {
result = new SqlServerUser();
}
break;
}
return result;
}
public static DaoDepartment createDepartment() {
DaoDepartment result = null;
switch (db) {
case "access": {
result = new AccessDepartment();
}
break;
case "sqlserver": {
result = new SqlServerDepartment();
}
break;
}
return result;
}
}
4、抽象工厂模式类 DaoFactory.java
/**
* 使用抽象工厂模式测试模拟数据库操作接口
* @author lattice
*
*/
public interface DaoFactory {
DaoUser createUser();
DaoDepartment createDepartment();
}
/**
* sqlserver操作工厂
* @author lattice
*
*/
class SqlserverFactory implements DaoFactory{
public DaoUser createUser() {
return new SqlServerUser();
}
public DaoDepartment createDepartment() {
return new SqlServerDepartment();
}
}
/**
* access 操作工厂
* @author lattice
*
*/
class AccessFactory implements DaoFactory{
public DaoUser createUser() {
return new AccessUser();
}
public DaoDepartment createDepartment() {
return new AccessDepartment();
}
}
5、演示Action.java
/**
* 简单工厂模式以及抽象工厂模式
* @author lattice
*
*/
public class Action {
public static void main(String[] args) {
{//演示抽象工厂模式sqlserver操作user
System.out.println("演示抽象工厂模式sqlserver操作user");
User user=new User();
user.setId("user1");
user.setName("lattice");
DaoFactory daoFactory=new SqlserverFactory();
DaoUser daoUser=daoFactory.createUser();
daoUser.insert(user);
daoUser.getUser("lattice");
}
{//简单工厂模式演示access操作部门
System.out.println("简单工厂模式演示access操作部门");
Department department=new Department();
department.setId("department1");
department.setName("development");
DaoDepartment daoDepartment=DataAccess.createDepartment();
daoDepartment.insert(department);
daoDepartment.getDepartment("development");
}
}
/**
* 输出结果:
演示抽象工厂模式sqlserver操作user
sql server 新增 user:name=lattice
sql server 通过name=lattice查询user
简单工厂模式演示access操作部门
access 新增 Department:name=development
access 通过name=development查询Department
*/
}