抽象工厂:
多个父类 每个父类若干子类
一个学生Dao抽象父类 方法 增删改查
对应一个数据库存储方式的学生Dao实现子类
一个文件存储方式的学生Dao实现子类
一个教师Dao抽象父类 方法增删改查
对应一个数据库存储方式的教师Dao实现子类
一个文件存储方式的教师Dao实现子类
一个抽象工厂 创建学生dao的方法 创建老师dao的方法
db子类工厂 创建学生dao的方法 创建老师dao的方法
file子类工厂 创建学生dao的方法 创建老师dao的方法
通过配置文件来确定选择哪种存储方式
在servise中,需要创建dao的实例对象
抽象工厂通过配置文件来确定使用哪种存储方式,确定后返回一个抽象工厂的实体对象,
通过实体对象选择自己要调用的是教师Dao还是学生Dao
实体类
public interface StudentDao { void insertStudent() ; }
public interface TeacherDao { void insertTeacher() ; }
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 }
1 public class DbStudentDao implements StudentDao{ 2 3 @Override 4 public void insertStudent() { 5 System.out.println("数据库存储添加学生"); 6 7 } 8 9 }
1 public class FileTeacherDao implements TeacherDao { 2 3 @Override 4 public void insertTeacher() { 5 System.out.println("文件存储添加老师"); 6 } 7 8 }
1 public class FileStudentDao implements StudentDao{ 2 3 @Override 4 public void insertStudent() { 5 System.out.println("文件存储添加学生"); 6 7 } 8 9 }
然后Servise创建工厂,调用对应的Dao进行增删改查
配置文件
property=com.methodfactory.DbDaoFactory
#property=com.methodfactory.FileDaoFactory