`

简单工厂模式中(选择实现类),配置文件方式

阅读更多
本文转自http://chjavach.iteye.com/blog/834679
简单工厂就是实现创建对象的功能,将创建对象的实现封装起来以供客户端使用,但有时一个接口的实现类有多个,如何选择创建哪个具体实例呢?可以从客户端传入参数,或用配置文件方式,在客户端传入参数中,当增加一个新的具体实例时,就要修改工厂类,以下是用配置文件形式,利用反射机制动态生成类,无需修改工厂类
/**
* 工厂类,用来创造Api对象
*/
public class Factory {
	/**
	 * 具体的创造Api的方法,根据配置文件的参数来创建接口
	 * @return 创造好的Api对象
	 */
	public static Api createApi(){
		//直接读取配置文件来获取需要创建实例的类
		//至于如何读取Properties,还有如何反射这里就不解释了
		Properties p = new Properties(); 
		InputStream in = null;
		try {
			in = Factory.class.getResourceAsStream(
"FactoryTest.properties");
			p.load(in);
		} catch (IOException e) {
			System.out.println(
"装载工厂配置文件出错了,具体的堆栈信息如下:");
			e.printStackTrace();
		}finally{
			try {
				in.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		//用反射去创建,那些例外处理等完善的工作这里就不做了
		Api api = null;
		try {
			api = (Api)Class.forName(p.getProperty("ImplClass"))
.newInstance();
		} catch (InstantiationException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		return api;
	}
}
分享到:
评论

相关推荐

    用配置文件和工厂模式访问多种数据库

    用配置文件和工厂模式访问多种数据库 知识点: 1、配置文件 2、log4j 3、工厂模式

    设计模式-工厂方法模式

    工厂方法模式,主要是利用反射机制获取配置文件的信息,用户可以在不知道如何生产对象的情况下获取对象。包括源代码和文档(文档在本博客的文档说明中)。

    抽象工厂模式(Abstract Factory Pattern)

    在初始化的时候会用到一次具体工厂类名,我们根据.NET特有的反射机制又可以把这个在客户端唯一的具体的非抽象类放到一个应用程序配置文件中,防止它变化。 这就符合了设计模式中的“开放--封闭”原则,依赖倒转原则...

    .Net中利用反射通过简单工厂模式实现对不同数据库的访问

    在.Net环境中利用C#语言编写的反射Demo,通过配置文件中的DB字符串,从而修改程序中反射出的不同类型,从而实现对不同数据库访问类的实例化。利用了简单的工厂模型,可以学习一下。

    从实例谈面向对象编程、工厂模式和重构

    我们可以把每种媒体文件类类型的相应信息放在配置文件中,然后根据配置文 件来选择创建具体的对象。并且,这种创建对象的方法将使用反射来完成。首先,创建配置文件: 程序代码 <appSettings> ...

    工厂设计模式之Java计算器产品.rar

    ③若计算器有一个配置文件,请设计这个配置文件类,保证该类在运行中只存在一个对象。 配置文件只有两个属性,依次为:计算器版本号,利用各自学号设置;计算器支持计算类型,可以利用字符串数组实现。

    面向对象设计模式应用之一

    )很多应用项目都有配置文件,这些配置文件里面定义一些应用于需要的参数数据。 通过客户端使用这个类是通过new一个AppConfig的...利用工厂模式改善设计,用java语言实现该OEM制造商的工厂模式,绘制该模式的UML类图。

    设计模式实验报告.doc

    如果在系统运行中,有很多地方都需要使用配置文件的内容,系统中会同时存 在多份配置文件的内容,这会严重浪费内存资源。 事实上,对于AppConfig类,在运行期间,只需要一个对象实例就够了。那么应该怎 么实现呢?用...

    Winsock I/O模型的实现( Select + AsyncSelect + EventSelect + 重叠模型 + IOCP )

    程序采用了策略模式、模板模式和工厂模式将各个Winsock I/O模型包装到 CSocketModelContext 这个类之中,通过该类的相关接口即可使用服务器的功能。 此外,程序采用分层的方式,利用配置文件动态加载服务器端的参数...

    spring4示例代码

    spring-2 演示了外部配置文件的引入(connection),spel(spring el)表达式 ,静态工厂方式及实例工厂方式及factorybean方式创建bean, spring的生命周期及BeanPostProcessor的使用,注解方式创建bean 及使用...

    day020-继承加强和设计模式代码和笔记.rar

    传统方式获取流是new创建的,而在web开发中有可能获取不到配置文件,为了避免这种情况,用以下方式获取流: 1. 通过当前类字节码文件的方式,一般是用当前类的字节码文件 当前类.class....

    java课程设计大作业-基于java构建的CrazyArcade泡泡堂游戏(源码+资源文件+说明文档)

    同时,该程序编写期间用了单例模式、工厂模式、模板模式等设计模式。为了游戏的可玩性,我们特意设计了平滑碰撞以及机器人。 项目结构 frame:包含如开始、游戏中、结束的JFrame main:包含程序入口和其它游戏控制 ...

    使用了三层和策略模式的-超市收银

    这是一个简单的超市收银测试程序,主要使用了简单工厂 三层架构 和策略模式等设计模式 完成简单的收银计算功能,业务逻辑封装在DLL里面,数据操作封装在了BAL里面 具体的算法实现,我单独的写成了Horbit的类库,方便...

    《程序天下:J2EE整合详解与典型案例》光盘源码

    12.6.16 编写Spring和Hibernate的配置文件spring-config.xml 12.6.17 编写web.xml 12.6.18 验证示例 12.7 小结 第四篇 J2EE项目案例精选 第十三章 网上调查系统 13.1 系统概述 13.2 需求分析 13.2.1 系统用例图 ...

    java 面试题 总结

    接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (2)

    12.6.16 编写Spring和Hibernate的配置文件spring-config.xml 12.6.17 编写web.xml 12.6.18 验证示例 12.7 小结 第四篇 J2EE项目案例精选 第十三章 网上调查系统 13.1 系统概述 13.2 需求分析 13.2.1 系统用例图 ...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (1)

    12.6.16 编写Spring和Hibernate的配置文件spring-config.xml 12.6.17 编写web.xml 12.6.18 验证示例 12.7 小结 第四篇 J2EE项目案例精选 第十三章 网上调查系统 13.1 系统概述 13.2 需求分析 13.2.1 系统用例图 ...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (3)

    12.6.16 编写Spring和Hibernate的配置文件spring-config.xml 12.6.17 编写web.xml 12.6.18 验证示例 12.7 小结 第四篇 J2EE项目案例精选 第十三章 网上调查系统 13.1 系统概述 13.2 需求分析 13.2.1 系统用例图 ...

    运动场管理系统.rar

    Java实现的,数据库配置使用了工厂模式,仅需修改database.properties的数据库文件,并配置mysql数据库表即可运行。 实现了数据库接口类,数据库实现类,用户实体类和用户实现类,服务接口类,服务实现类,工厂类...

    asp.net知识库

    革新:.NET 2.0的自定义配置文件体系初探 关于如何在ASP.NET 2.0中定制Expression Builders 怎么在ASP.NET 2.0中使用Membership asp.net 2.0-实现数据访问(1) ASP.NET 2.0 新特性 .NET 2.0里使用强类型数据创建...

Global site tag (gtag.js) - Google Analytics