WEB开发网
开发学院软件开发Java 从对象创建和引用小议解耦 阅读

从对象创建和引用小议解耦

 2010-07-12 00:00:00 来源:WEB开发网   
核心提示: 通过 清单 2 所示的第二种实现方式,清单 1 实现方式的缺点得到解决,从对象创建和引用小议解耦(3),但是值得注意的是,耦合并没有消除,仍然需要修改并重新编译 ExpressionEvaluatorFactory 类,当然优势自然是客户端代码无需修改了,而是转移到 ExpressionEval

通过 清单 2 所示的第二种实现方式,清单 1 实现方式的缺点得到解决,但是值得注意的是,耦合并没有消除,而是转移到 ExpressionEvaluatorFactory 工厂类中。当需要换成其他 ExpressionEvaluator 的实现时,仍然需要修改并重新编译 ExpressionEvaluatorFactory 类,当然优势自然是客户端代码无需修改了。在此我们引入第三种实现方式。

清单 3. 计算器实现方式三 (Service Look-up)

public class ExpressionEvaluatorFactory { 
 
  public static final String EXPRESSION_EVALUATOR_PROPERTY_NAME="ExpressionEvaluator"; 
 
  private static final String DEFAULT_EXPRESSION_EVALUATOR_IMPL 
    = "ExpressionEvaluatorImpl"; 
 
  public static ExpressionEvaluator createExpressionEvaluator() { 
    String implClassName = loadFromSystemProperty(); 
    if (implClassName == null) { 
      implClassName = loadFromJREPropertyFile(); 
      if (implClassName == null) { 
        implClassName = loadFromServiceEntryURL(); 
        if (implClassName == null) { 
          implClassName = DEFAULT_EXPRESSION_EVALUATOR_IMPL; 
        } 
      } 
    } 
    Class cls = loadClass(implClassName); 
    try { 
      return (ExpressionEvaluator) cls.newInstance(); 
    } catch (Exception e) { 
      throw new ExpressionEvaluatorException("Fail to create instance of [" 
        + implClassName + "]", e); 
    } 
  } 
 
  private static Class loadClass(String implClassName) { 
    ClassLoader cl = Thread.currentThread().getContextClassLoader(); 
    try { 
      if (cl != null) { 
        return cl.loadClass(implClassName); 
      } else { 
        return Class.forName(implClassName); 
      } 
    } catch (Exception e) { 
      throw new ExpressionEvaluatorException("Fail to load class [" 
        + implClassName + "]", e); 
    } 
  } 
   
  ...... 
} 

上一页  1 2 3 4 5 6 7 8  下一页

Tags:对象 创建 引用

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接