工厂模式详解

定义一个理头发的接口 

package factory;
/**
 * 理头发接口
 * @author Administrator
 *
 */
public interface HairInterface { 
	//实现了发型接口
	public void draw();
}

中分的发型
package factory.ipml;

import factory.HairInterface;

public class InHiar implements HairInterface {

	@Override
	public void draw() {
		// TODO Auto-generated method stub
		System.out.println("中分");
	}

}

右偏分的发型

package factory.ipml;

import factory.HairInterface;

public class RigeHiar implements HairInterface {
   /**
    * 做了个 右偏分发型
    */
	@Override
	public void draw() {
		// TODO Auto-generated method stub
		System.out.println("又偏分发型");
	}

}

左偏分的发型

package factory.ipml;

import factory.HairInterface;

public class LeftHair implements HairInterface {
    
	/**
	 * 做了一个左偏分的发型哈
	 */
	@Override
	public void draw() {
		// TODO Auto-generated method stub
		System.out.println("左偏分发型");
		
	}

}

发型工厂

package factory;

import java.util.Map;

import factory.ipml.PropertisResader;

/**
 * 发型工厂 
 * @author Administrator
 *
 */
public class Hiarfactory {
	
	
	public HairInterface geiHiar(HairInterface hiar){
		return hiar;
		
	};
	
	//通过反射
	public HairInterface getHairByClass(String className){
		try {
			HairInterface hari=(HairInterface)Class.forName(className).newInstance();
			return hari;
		} 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 null;
	}
	
	   //properties文件  
		public HairInterface getHairByClassKey(String key){
			try {
				
				Map<String,String>map=new PropertisResader().getProperties();
				HairInterface hari=(HairInterface)Class.forName(map.get(key)).newInstance();
				return hari;
			} 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 null;
		}

}


读取properties文件类

package factory.ipml;

import java.io.InputStream;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;

public class PropertisResader {
	
	public  Map<String, String>getProperties(){
		Properties ps=new Properties();
		Map<String, String> map=new HashMap<String, String>();
		try {
			//读取文件
			//文件名前不加“/”,则表示从当前类所在的包下查找该资源。
			InputStream in =getClass().getResourceAsStream("/factory/type.properties");
			System.out.println(getClass().getResourceAsStream(""));
			ps.load(in);
			
			Enumeration en=ps.propertyNames();
			while(en.hasMoreElements()){
				String key=(String)en.nextElement();
				String property=ps.getProperty(key);
				map.put(key, property);
				System.out.println("key:"+key+"        value:"+property);
			}
			return map;
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
		return null;
		
	}

}

完成最后测试工厂类 

package factory.test;

import factory.HairInterface;
import factory.Hiarfactory;
import factory.ipml.LeftHair;

/**
 * 测试方法
 * @author Administrator
 *
 */
public class Test {
	public static void main(String[] args) {
		
		/*HairInterface left=new LeftHair();
		left.draw();*/
		Hiarfactory faoce=new Hiarfactory();
		/*HairInterface  f= faoce.geiHiar(new LeftHair());
		 f.draw();*/
		//通过反射实现
		/*HairInterface left=faoce.getHairByClass("factory.ipml.LeftHair");
		left.draw();*/
		
		try {
			HairInterface left=faoce.getHairByClassKey("in");
			left.draw();
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
		
	}

}









  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值