一、介绍:
1、定义:提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。
2、组成结构:
(1)抽象工厂角色:担任这个角色的是工厂方法模式的核心,它是与应用程序无关的。任何在模式中创建对象的工厂类必须实现这个接口。
(2)具体工厂角色:担任这个角色的是实现了抽象工厂接口的具体Java类,具体工厂角色含有与应用密切相关的逻辑,并且受到应用程序的调用以创建产品对象。
(3)抽象产品角色:工厂方法模式所创建的对象的超类型,也就是产品对象的共同父类或共同拥有的接口。
(4)具体产品角色:这个角色实现了抽象产品角色所申明的接口。工厂方法模式所创建的每一个对象都是某个具体产品角色的实例。
3、与简单工厂、工厂方法的比较:工厂模式中,重要的是工厂类,而不是产品类。返回的实例一定是工厂创建的,而不是从其他对象中获取的。区别:
(1)简单工厂 : 用来生产同一等级结构中的任意产品。(对于增加新的产品,无能为力);
(2)工厂方法 :用来生产同一等级结构中的固定产品。(支持增加任意产品) ;
(3)抽象工厂 :用来生产不同产品族的全部产品。(对于增加新的产品,无能为力;支持增加产品族) 。
二、demo:
1、
(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);
输出:文章来源:https://www.toymoban.com/news/detail-670757.html
在Sql Server中给User表增加一条记录
在Sql Server中根据用户Id得到User表一条记录
在Sql Server中给Department表增加一条记录
在Sql Server中根据部门Id得到Department表一条记录
文章来源地址https://www.toymoban.com/news/detail-670757.html
到了这里,关于设计模式(3)抽象工厂模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!