抽象工厂:
多个父类 每个父类若干子类
一个学生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或者是文件类型的Dao15 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 @Override10 public StudentDao createStudentDao() {11 12 return new DbStudentDao();13 }14 15 @Override16 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 @Override10 public StudentDao createStudentDao() {11 12 return new FileStudentDao();13 }14 15 @Override16 public TeacherDao createTeacherDao() {17 return new FileTeacherDao();18 }19 20 }
1 public class DbTeacherDao implements TeacherDao {2 3 @Override4 public void insertTeacher() {5 System.out.println("数据库存储添加老师");6 }7 8 }
1 public class DbStudentDao implements StudentDao{2 3 @Override4 public void insertStudent() {5 System.out.println("数据库存储添加学生");6 7 }8 9 }
1 public class FileTeacherDao implements TeacherDao {2 3 @Override4 public void insertTeacher() {5 System.out.println("文件存储添加老师");6 }7 8 }
1 public class FileStudentDao implements StudentDao{2 3 @Override4 public void insertStudent() {5 System.out.println("文件存储添加学生");6 7 }8 9 }
然后Servise创建工厂,调用对应的Dao进行增删改查
配置文件
property=com.methodfactory.DbDaoFactory
#property=com.methodfactory.FileDaoFactory