相关视频下载地址:链接:http://pan.baidu.com/s/1sjJTFyP 密码:sl81
Java爱好者交流群: 369508920 免费获取项目资源
class="java">car=cn.it.pattern.demo05.Car bus=cn.it.pattern.demo05.Bus jeep=cn.it.pattern.demo05.Jeep
?
/*
 * 抽象工厂+反射: 解决了工厂方法的代码量过大问题, 而且新增对象也用修改客户端代码
 * 可以传入key, 然后通过key查找具体的value, 以后类文件移动仅仅需要修改bean.properties中的value即可
 * */
public class AbstractFactory {
	// 默认创建空的properties文件
	private static Properties prop=new Properties();
	
	// 静态块,在类加载的时候,仅仅执行一次
	static{
		System.out.println("----static-----");
		// 通过输入流,加载相应的prop文件
		InputStream stream = AbstractFactory.class.getResourceAsStream("bean.properties");
		try {
			prop.load(stream);
		} catch (Exception e) {
			throw new RuntimeException();
		}
	}
	public static Object getVehicle(String type) {
		// Class是Java的一个类型(File), Class它表示的是一个*.class文件
		// 根据key去查找相应的value值
		try {
			Class clazz = Class.forName(prop.getProperty(type));
			// 获取了*.class文件后,可以创建一个对象
			return clazz.newInstance();
		} catch (Exception e) {
			throw new RuntimeException();
		}
	}
}
?
/** * @author 专注Java、Android 企业定制培训 * @添加QQ技术交流群: 369508920 可免费获取项目视频 * @Description: TODO(设计模式之工厂模式) * @Title: PatternDemo.java * @Package cn.it.pattern.demo01 */ public class PatternDemo { /* * 抽象工厂+反射: 解决了对象创建问题, 遵循了开发封闭原则 , 客户端不需要在判断 */ public static void main(String[] args) { // 面向接口编程 Vehicle vehicle = (Vehicle)AbstractFactory.getVehicle("jeep"); Vehicle vehicle2 = (Vehicle)AbstractFactory.getVehicle("car"); vehicle.run(); vehicle2.run(); } }
?