• 抽象工厂举例


    抽象工厂:  

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

      一个学生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

  • 相关阅读:
    npm run build无法打包的可能原因 npm ERR! missing script: build
    java的Scanner类的close()方法引来的故事
    Markdown语法1
    MarkdownPad2破解安装&使用
    MarkDown语法5
    Markdown语法2
    Markdown0
    Sublime Text配置anaconda环境
    解决:Tensorflowgpu中的Could not load dynamic library ‘cudart64_101.dll‘; dlerror: cudart64_101.dll not found
    Markdown语法4
  • 原文地址:https://www.cnblogs.com/19322li/p/10983185.html
Copyright © 2020-2023  润新知