抽象工厂举例

抽象工厂:  

   多个父类   每个父类若干子类

  一个学生Dao抽象父类 方法 增删改查
  对应一个数据库存储方式的学生Dao实现子类
  一个文件存储方式的学生Dao实现子类

  一个教师Dao抽象父类 方法增删改查
  对应一个数据库存储方式的教师Dao实现子类
  一个文件存储方式的教师Dao实现子类

  一个抽象工厂 创建学生dao的方法 创建老师dao的方法
  db子类工厂 创建学生dao的方法 创建老师dao的方法
  file子类工厂 创建学生dao的方法 创建老师dao的方法

  通过配置文件来确定选择哪种存储方式
  在servise中,需要创建dao的实例对象

抽象工厂通过配置文件来确定使用哪种存储方式,确定后返回一个抽象工厂的实体对象,

通过实体对象选择自己要调用的是教师Dao还是学生Dao
实体类

public interface StudentDao {
    void insertStudent() ;
}
学生Dao接口
public interface TeacherDao {
    void insertTeacher() ;
}
老师Dao接口
 1 /**
 2  * 抽象工厂,
 3  * 1、通过配置文件选择数据存储方式
 4  * 2、规范子类的创建Dao的方法
 5  * @author Administrator
 6  *
 7  */
 8 public abstract class DaoFactory {
 9         
10 //     1、提供获取工厂对象的方法,通过这个方法得到工厂对象  
11      public static DaoFactory getDaoFactory() {
12 //         1.1创建properties对象
13          Properties properties = new Properties();
14 //         1.2加载配置文件  配置文件中存放的是数据库类型的dao或者是文件类型的Dao
15          try {
16             properties.load(new FileReader("abstractfactory.properties"));
17 //         1.3 通过键值对获取权限命名
18             String property = properties.getProperty("property");
19 //         1.4 通过类反射获取这个类并创建对象
20             DaoFactory daoFactory = (DaoFactory) Class.forName(property).newInstance();
21              return daoFactory;
22         } catch (Exception e) {
23             e.printStackTrace();
24         }
25 //         1.5返回对象  
26         return null;
27      }
28 //     2、用户获取到DaoFactory的实现类对象后,通过工厂对象调用方法创建需要的Dao对象
29      public abstract StudentDao createStudentDao();
30      public abstract TeacherDao createTeacherDao();
31 }
 1 /**
 2  * 将权限命名放在配置文件中
 3  * 如果用户选择的是数据库存储方式,则使用该工厂创建对应的Dao
 4  * @author Administrator
 5  *
 6  */
 7 public class DbDaoFactory extends DaoFactory {
 8 
 9     @Override
10     public StudentDao createStudentDao() {
11         
12         return new DbStudentDao();
13     }
14 
15     @Override
16     public TeacherDao createTeacherDao() {
17         return new DbTeacherDao();
18     }
19 
20 }
数据库存储方式的工厂
 1 /**
 2  * 将权限命名放在配置文件中
 3  * 如果用户选择的是数据库存储方式,则使用该工厂创建对应的Dao
 4  * @author Administrator
 5  *
 6  */
 7 public class FileDaoFactory extends DaoFactory {
 8 
 9     @Override
10     public StudentDao createStudentDao() {
11         
12         return new FileStudentDao();
13     }
14 
15     @Override
16     public TeacherDao createTeacherDao() {
17         return new FileTeacherDao();
18     }
19 
20 }
文件存储方式的工厂
1 public class DbTeacherDao implements TeacherDao {
2 
3     @Override
4     public void insertTeacher() {
5         System.out.println("数据库存储添加老师");
6     }
7 
8 }
数据库存储类型的教师Dao
1 public class DbStudentDao implements StudentDao{
2 
3     @Override
4     public void insertStudent() {
5         System.out.println("数据库存储添加学生");
6         
7     }
8 
9 }
数据库存储类型的学生Dao
1 public class FileTeacherDao implements TeacherDao {
2 
3     @Override
4     public void insertTeacher() {
5         System.out.println("文件存储添加老师");
6     }
7 
8 }
文件存储类型的老师Dao
1 public class FileStudentDao implements StudentDao{
2 
3     @Override
4     public void insertStudent() {
5         System.out.println("文件存储添加学生");
6         
7     }
8 
9 }
文件存储类型的学生Dao

然后Servise创建工厂,调用对应的Dao进行增删改查

配置文件

property=com.methodfactory.DbDaoFactory
#property=com.methodfactory.FileDaoFactory

原文地址:https://www.cnblogs.com/19322li/p/10983185.html