在上一篇的博文中,我们研究了抽象工厂,我们简单的回顾一下:
首先,抽象工厂是为了应对产品簇的概念而生的。
其次,它使我们在不影响现有产品等级结构的基础上,方便的在不同产品系列当中进行切换。
最后,它封装了产品对象的创建过程,使之与客户端进行分离,无需客户端考虑他的组装过程。
但是,如果需求来自功能的增加,我们不仅要增加新的功能父类与产品系列子类,还需修改工厂接口以及所有子类工厂。
——————————————————————————————————————————————————————————————————
那我们有什么方式可以对抽象工厂进行优化呢,大家随我一起来看一下。
用简单工厂+抽象工厂的方式进行实现:
首先,对于产品的子类,我们不做修改
先是IUser以及其子类
public abstract class IUser {
public abstract void insert(User user);
public abstract User getUser(String id);
}
public class SqlServerUser extends IUser {
@Override
public void insert(User user) {
// ......
System.out.println("在SqlServer中插入User成功");
}
@Override
public User getUser(String id) {
User u = null;
// ......
System.out.println("在SqlServer中查询到了User");
return u;
}
}
public class AccessUser extends IUser {
@Override
public void insert(User user) {
// ......
System.out.println("在Access中插入User成功");
}
@Override
public User getUser(String id) {
User u = null;
// ......
System.out.println("在Access中查询到了User");
return u;
}
}
然后是IDepartment以及其子类
public abstract class IDepartment {
public abstract void insert(Department deprecated);
public abstract Department getDepartment(String id);
}
public class SqlServerDepartment extends IDepartment {
@Override
public void insert(Department department) {
// ......
System.out.println("在SqlServer中插入Department成功");
}