package cn.itcast.servletday13.factory; import java.io.IOException; import java.io.InputStream; import java.util.Properties; import cn.itcast.servletday13.business.dao.PageDao; import cn.itcast.servletday13.business.manager.PageManager; import cn.itcast.servletday13.business.manager.impl.PageManagerImpl; /** * * @author Administrator *这是一个工厂类的方法,无论调用多少次它,我们得到的都是一个。 *我们是无论何时得到的都是同一个PageManagerFactory,其实本质就 *是我们想要得到同一个PageManagerFactory的对象,所以把它的new出一个 *静态的对象,然后写一个静态方法得到这个静态的对象,其实就是单例, *然后再去获得这个类的其它方法时间得到的肯定也是一个,因为PageManagerFactory *本身就是一个。 */ public class PageManagerFactory { private static Properties properties = new Properties(); static{ try { InputStream inputStream = PageManagerFactory.class.getClassLoader().getResourceAsStream("conf.properties"); properties.load(inputStream); inputStream.close(); } catch (IOException e) { //这个异常要记好,经常面试要用。 throw new ExceptionInInitializerError(e); } } public PageManagerFactory() { // TODO Auto-generated constructor stub } private static PageManagerFactory instance = new PageManagerFactory(); public static PageManagerFactory getInstance(){ return instance; } PageManager pageManager = null; public PageManager getPageManager(){ //判断是不是为空,就是判断是不是第一次,只是在第一次的时间创建,如果多次创建工厂就没有意思了。 if (pageManager==null) { try { pageManager = (PageManager)Class.forName(properties.getProperty("manager")).newInstance(); } catch (InstantiationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return pageManager; }; PageDao pageDao = null; public PageDao getPageDao(){ if (pageDao==null) { try { pageDao = (PageDao)Class.forName(properties.getProperty("dao")).newInstance(); } catch (InstantiationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return pageDao; } }