现在的位置: 首页 > 综合 > 正文

工厂模式

2018年05月17日 ⁄ 综合 ⁄ 共 1932字 ⁄ 字号 评论关闭
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;
	}
	

}

【上篇】
【下篇】

抱歉!评论已关闭.