简单工厂模式+反射机制
来源:互联网 发布:淘宝一元秒杀网在那 编辑:程序博客网 时间:2024/06/05 04:56
一、首先创建一个编程语言的接口 LanguageInterface
package com.design.factory;/** * 编程语言接口 * @author Administrator * */public interface LanguageInterface {//具体语言类型public void useType();}
二、然后创建两个具体的编程语言(CType、JavaType)实现该接口
package com.design.factory;public class CType implements LanguageInterface {@Overridepublic void useType() {System.out.println("----C语言----");}}
package com.design.factory;public class JavaType implements LanguageInterface{@Overridepublic void useType() {System.out.println("----Java----");}}
三、接着创建一个language.properties文件用来映射具体语言的路径
c=com.design.factory.CTypejava=com.design.factory.JavaType
四、再创建一个properties文件读取工具ReaderProperties
package com.design.factory;import java.io.InputStream;import java.util.Enumeration;import java.util.HashMap;import java.util.Map;import java.util.Properties;/** * 编程语言读取工具 * @author Administrator * */public class ReaderProperties {public Map<String, String> getPropertyAndKey(){Map<String, String> map = new HashMap<String, String>();Properties pt = new Properties();try {//读取映射文件InputStream in = getClass().getResourceAsStream("language.properties");//从输入流读取属性列表(键和元素对)pt.load(in);//返回属性列表所有键的枚举Enumeration<?> en = pt.propertyNames();//逐行读取枚举的key和value并存放在map中while(en.hasMoreElements()){String key = (String)en.nextElement();String value = pt.getProperty(key);map.put(key, value);}} catch (Exception e) {e.printStackTrace();}return map;}}
五、还有就是我们的工厂类LanguageFactory
package com.design.factory;import java.util.Map;/** * 编程语言工厂 * @author Administrator * */public class LanguageFactory {public LanguageInterface getLanguageTypeByKey(String key){try {//获取language.properties文件的属性列表Map<String, String> map = new ReaderProperties().getPropertyAndKey();//通过映射找到对应的类LanguageInterface li = (LanguageInterface)Class.forName(map.get(key)).newInstance();return li;} catch (InstantiationException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (ClassNotFoundException e) {e.printStackTrace();}return null;}}
六、最后就是测试
package com.design.factory;/** * 测试 * @author Administrator * */public class TestFactory {public static void main(String[] args){LanguageFactory lf = new LanguageFactory();lf.getLanguageTypeByKey("c").useType();}}
测试结果为
----C语言----
注:使用反射的目的就是为了规避工厂中使用switch case 或if else 判断,而且如果有什么需要新加的产品也无需修改工厂类,只需新加一个产品类实现产品接口,再修改一下properties文件就可以做到。
下面我们新加一个PythonType
package com.design.factory;public class PythonType implements LanguageInterface {@Overridepublic void useType() {System.out.println("----Python----");}}
再修改一下language.properties文件
c=com.design.factory.CTypejava=com.design.factory.JavaTypepython=com.design.factory.PythonType
然后测试一下
package com.design.factory;/** * 测试 * @author Administrator * */public class TestFactory {public static void main(String[] args){LanguageFactory lf = new LanguageFactory();lf.getLanguageTypeByKey("python").useType();}}
执行结果:
----Python----
如要查看不带反射的简单工厂模式请查看http://blog.csdn.net/fateforever/article/details/78361289
阅读全文
0 0
- 简单工厂模式+反射机制
- java反射机制及简单工厂模式
- 简单工厂设计模式-反射机制
- 简单工厂模式+反射
- headFirst学习13.简单工厂模式与OC反射机制
- 学习反射机制 - 工厂模式
- 策略模式+简单工厂+反射
- 简单工厂模式与反射
- 反射实现简单工厂模式
- Java反射机制(五):使用反射增强简单工厂设计模式
- [转] Java的反射机制+工厂模式
- Java反射机制 -工厂设计模式
- 基于C#反射机制的工厂模式
- java反射机制工厂模式的应用
- java反射机制-工厂设计模式
- 利用反射机制实现工厂模式
- Java 文件反射机制 工厂模式
- Spring的工厂模式和反射机制
- Redis 服务器
- ABP官方文档(三)【模块系统】
- Ubuntu 16.04 重置密码(忘记密码)
- webView回退功能
- 时空跳跃者的魔法(codevs3315)
- 简单工厂模式+反射机制
- C/C++用多种方法交换两个数a和b的值
- Android dp和px互转
- 生啃“编译原理”(一)——引论
- 你不知道的JAVA小知识——equals和hashCode方法
- 消除input,button之间的间距
- svn的merge使用例子
- SpringMVC的静态资源拦截
- IIS错误信息:HTTP 错误 401.3