从对象创建和引用小议解耦
2010-07-12 00:00:00 来源:WEB开发网解耦是软件设计领域中一个永恒不变的话题,在软件设计过程中,为了最大程度降低各个应用组件之间的耦合性,以提高其可维护性和可复用性,出现了诸多设计原则和解决方案。例如面向接口编程,开 - 闭原则,依赖倒转原则等,另外更出现一系列设计模式。同时,由于如何实现解耦涉及面相当广,大至组件的划分和关联,小至对象的创建和引用,往往使软件开发人员感到迷惑。本文将从对象创建和引用的角度出发,介绍常见的一些解决方案,并比较之间的差别,期望读者能从一个侧面加深对解耦概念的理解。
应用场景
为方便后续介绍,本文假设一个计算器的应用。初始设计由以下几部分组成:
计算器界面类 CalculatorUI该类接受用户输入的表达式,执行一些输入校验工作,并将合法的表达式传递到具体的分析器,最终将计算结果返回给用户。
语法分析器接口,ExpressionEvaluator及其实现类 ExpressionEvaluatorImpl,其承担实际的计算工作。
在该应用场景中,CalculatorUI类需要持有指向 ExpressionEvaluator实现的引用,以便在运行时委派其实际的计算工作。文章后续将围绕如何持有和初始化 ExpressionEvaluator实现展开介绍,并依次提出多种解决方案。
清单 1. 计算器实现方式一 (new 操作符 )
public class CalculatorUI {
private ExpressionEvaluator expressionEvaluator;
public CalculatorUI() {
expressionEvaluator = new ExpressionEvaluatorImpl();
}
public String evaluate(String expression) {
if (expression == null || expression.isEmpty()) {
throw new IllegalArgumentException("[" + expression + "]
is not a valid expression");
}
return expressionEvaluator.evaluate(expression);
}
}
更多精彩
赞助商链接