小菜写的第三份代码:
就第二份代码来说,其实已经是抽象工厂模式的结构,在这份代码里就是在这基础上让“产品多样化”。
之前总结说,工厂生产可乐,并且可乐分为可口可乐和百事可乐。但现在还要生产别的产品,例如薯片,也分为可比克牌的、乐事牌的。说了这么多,我就是要给工厂添加一条生产线。(当然,也许举的例子不太恰当,仅供参考)
1、一些基础类
- User类:
** 成员变量:1、int id;2、String name;
** 方法:getXxx()、setXxx()- Department类:
** 成员变量:int id;
** 方法:getXxx()、setXxx()之前都是通过Sql或Access操作User字段、第三份代码就是再加一个Department字段并对其操作。
和第二份代码相比,无非是从1到多的变化。
public class User {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class Department {
private int id;
private String department;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getDepartment() {
return department;
}
public void setDepartment(String department) {
this.department = department;
}
}
2、操作类抽象接口: IUser、IDepartment
对比两个接口的内容都差不多,就添加、查询,区别在于操作对象不一样。
既然方法功能一样,或许可以为这两个抽象接口上面再设计个接口,然后分别实现。
public interface IUser {
void Insert(User user);
User GetUser(int id);
}
public interface IDepartment {
void Insert(Department department);
Department GetDepartment(int id);
}
3、实现 “操作类抽象接口”
SqlserverUser implements IUse
SqlserverDepartment implements IDepartment
AccessUser implements IUse
AccessDepartment implements IDepartment
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;
}
}
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;
}
}
public class AccessUser implements IUser {
@Override
public void Insert(User user) {
System.out.println("在Access 中给User表增加一条记录");
}
@Override
public User GetUser(int id) {
System.out.println("在Access 中根据ID得到User表一条记录");
return null;
}
}
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 、工厂接口:IFactory
public interface IFactory {
IUser CreateUser();
IDepartment createDepartment();
}
5、实现工厂接口:SqlServerFactory、 AccessFactory
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、客户端代码
public class AbstractFactoryDemo {
public static void main(String[] args) {
User user = new User();
Department dept = new Department();
IFactory factory = new AccessFactory();
// Ifactory factory = new SqlserverFactory();
IUser iu = factory.CreateUser();
iu.Insert(user);
iu.GetUser(1);
IDepartment id = factory.createDepartment();
id.Insert(dept);
id.GetDepartment(1);
}
}
7、结果输出
在Access 中给User表增加一条记录
在Access 中根据ID得到User表一条记录
在Access中给Department表增加一条记录
在Access中根据ID得到Department表一条记录