动态工厂模式---(3)
2016-07-26 10:51
435 查看
动态工厂模式:
虽然简单工厂模式的使用消除了客户端对接口实例的依赖,将其实例化交给工厂类来实现,但是工厂类对接口实例的依赖依然很强,当需要增加新的子类时,不仅需要编写相应的子类实现,还需要修改工厂类支持。这种强依赖不利于系统的扩展。
工厂类的唯一职责就是生产不同的对象。那么除了用new 来创建对象之外还有没有其他的方法?这就用到类的反射了。看下面的代码:
这样通过java的反射原理创建接口对象,消除了工厂类对接口实现类的依赖。使用反射具有很好的可扩展性,这样当我们需要扩展运算时,只需要实现具体的类即可。
虽然简单工厂模式的使用消除了客户端对接口实例的依赖,将其实例化交给工厂类来实现,但是工厂类对接口实例的依赖依然很强,当需要增加新的子类时,不仅需要编写相应的子类实现,还需要修改工厂类支持。这种强依赖不利于系统的扩展。
工厂类的唯一职责就是生产不同的对象。那么除了用new 来创建对象之外还有没有其他的方法?这就用到类的反射了。看下面的代码:
class Factory2 { public static Operator createOperator(String name) throws Exception { try { Class clazz = Class.forName(name); //通过反射得到类的Class对象 return (Operator) clazz.newInstance(); //通过class对象创建实例 } catch (ClassNotFoundException e) { e.printStackTrace(); return null; } } }
public class Test { public static void main(String[] args) throws Exception { Factory2 factory = new Factory2(); Operator operator = factory.createOperator("OperatAdd"); //如果使用减法运算,只需更改传入的参数 operator.setOperatA(2); operator.setOperatB(3); System.out.println(operator.getResult()); } }
这样通过java的反射原理创建接口对象,消除了工厂类对接口实现类的依赖。使用反射具有很好的可扩展性,这样当我们需要扩展运算时,只需要实现具体的类即可。
相关文章推荐
- 【WebService】带你走进webservice的世界
- 代码重构——程序员应有的基因
- 各LaunchMode的使用场景
- CodeForces 289B Polo the Penguin and Matrix (贪心)
- 十分钟玩转 jQuery、实例大全
- SecureCRT 实用配置
- POJ-2677 Tour(双调欧几里得旅行商问题)(动态规划)
- Batch Normalization & Layer Normalization
- 腾讯后台开发笔试知识点汇总
- Android开发创建文件夹失败解决方案
- Eclipse IDE中Android新建项目打红叉的解决方法
- Apache Shiro学习笔记(二)身份验证subject.login过程
- Java监测窗口事件
- iOS9 Universal Link实现
- Java ConcurrentModificationException异常
- Jenkins+Docker搭建持续集成测试环境
- html基础
- 中国剩余定理 模板
- SPPLayer
- Spring中属性文件properties的读取与使用