文/xuld
面向接口设计,基本步骤为:
1. 使用面向对象的方法,确定要研究的实体对象,以及对象之间的关系。
2. 根据对象之间的关系,确定对象必需的成员,即接口。
3. 实现所有接口,在实现接口时所需要的工具函数单独放到一个静态类,而非对象本身。
举例,现在需要设计一个计算器,它将拥有计算 + - * / 运算符的能力。
1. 确定要研究的实体对象。
// 这是对象。 class Computer { }
2. 确定对象必需的成员。
class Computer { // 这是接口。 int compute(int left, char operator, int right) { } }
3. 实现方法。
class Computer { int compute(int left, Operator operator, int right) { // 实现接口时,不会改变原有类的设计,而是单独提取工具类库。 switch(operator) { case '+': return ComputerHelper.add(left, right); case '-': return ComputerHelper.sub(left, right); case '*': return ComputerHelper.mul(left, right); case '/': return ComputerHelper.div(left, right); } } } static class ComputerHelper { static int add(int left, int right) { return left + right; } static int sub(int left, int right) { return left - right; } static int mul(int left, int right) { return left * right; } static int div(int left, int right) { return left / right; } }
和面向对象的区别:
1.面向对象中,类内部封装大量实现逻辑。面向接口中实体类是不可再拆分的最小逻辑单位,实现逻辑不位于类内部。
2.面向对象中,类代表一个完整的对象。而面向接口中类代表对象的一个片面。例如人这个对象,在面向接口中,可以分成动物和用户两种实体,它们直接共享一个接口而非对象。
面向接口的优势:
在面向接口中,对象以及对象的目标是非常明确的,通过对象的关系链可以很清晰地理解整体的构架图,而不会受到各个实现逻辑的干扰。
同时,部分逻辑的改变不导致整个项目重构。