动态工厂模式---(3)

来源:互联网 发布:mac地址能不能修改 编辑:程序博客网 时间:2024/04/27 07:29

动态工厂模式:


   虽然简单工厂模式的使用消除了客户端对接口实例的依赖,将其实例化交给工厂类来实现,但是工厂类对接口实例的依赖依然很强,当需要增加新的子类时,不仅需要编写相应的子类实现,还需要修改工厂类支持。这种强依赖不利于系统的扩展。

   工厂类的唯一职责就是生产不同的对象。那么除了用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的反射原理创建接口对象,消除了工厂类对接口实现类的依赖。使用反射具有很好的可扩展性,这样当我们需要扩展运算时,只需要实现具体的类即可。

    
0 0
原创粉丝点击