`

Java面向对象设计最佳实践 - 方法设计(二)

阅读更多

    这篇文章介绍方法范围设计,这种设计是API开发人员容易忽视的部分,也是相对困难和耗时的。 所谓范围,这里分为两个方面:第一,物理范围;第二,逻辑范围。

1.什么是物理范围
主要是指访问范围。Java编程语言提供了4种访问限定修饰符:public、protected、(package public)、private,这四个访问限定符的访问权限角度逐渐递减。这些修饰信息保存在类的字节码中,可以通过编译时确定和验证,这也是称为物理 范围的原因。

2.什么是逻辑范围
如果说物理范围限于访问范围的话,那么逻辑范围更加广阔,包括方法返回类型、参数类型、参数数量等。具体的介绍在下篇详细解释。

3.怎么设计范围
通过简单的解释两种范围的意义,那么下面关注怎么来设计范围。好的设计应该充分地发挥面向对象的复用特性。那么满足了复用特性的API设计就是好的设计 吗?不一定。在面向对象设计原则中,常常挂在嘴边的“高内聚、低耦合”,为了降低耦合性,应该使API之间尽可能的少了解。

例如:测量人体重的辅助类-PersonWeightCalculator,其中定义了calculate方法,传递一个Person对象作为参数,返回 double类型单位的重量值。按照业务逻辑的规定,需要了解人的性别,身高。设计中PersonWeightCalculator必须能访问 Person的gender和height的状态信息,在可能的情况中,还能访问其他无关的Person的属性信息,比如name信息。那么,这种情况就 是一种不好的“暴露”设计。留下的问题是怎么修改?
有人可能会说,既然PersonWeightCalculator耦合了Person对象,那么把Person参数替换成两个参数height和 gender。这样减少了Person类型依赖,同时,也是“API之间知道最小化”。其实,这不是一个很好的方法,尽管不少API开发人员是这么做的。 主要缺点有两个:第一,破坏了“源代码兼容性”。良好的API设计应该注意兼容性,其中有“源代码”和“二进制”兼容性。所谓的“源代码兼容性”是指,在 API的修正和增进前后,API的方法签名或者其他定义保证语法和语义的兼容。反之,则是不兼容。回到例子中,通过修改方法列表,其他调用其的地方,都需 要作出相应的修改,否则编译时错误。可以通过“开闭原则“(对增加开放,对修改关闭)来解决,添加一个新的带height和gender参数的 calculate方法,标记原来方法为Deprecated;第二,参数数量的问题,当前的算法只需要两个参数,那么怎么扩展?还是添加一个新的方法? 当然可以这么做,不过只依赖Person对象有何不可?卖一点关子,这个内容在下篇详细介绍。

笔者的做法是,如果有必要的话,把PersonWeightCalculator类重构到Person类同包下。改变包的组织结构,对于其他调用者来说, 仅仅需要通过IDE重构功能重新导入即可,不需要改变实现代码。然后,开放height和gender属性为package public。这样做的好处是,只改变需要Person的属性的开放性,不修改业务逻辑。这样避免了修改后的风险,同时测试用例也不需要修改测试逻辑。

在JDK的API中,有不少的这样做法,比如java.lang.ThreadLocal和java.lang.Thread。

  总之,方法范围设计是很困难,不但需要很好地把握编程语言,而且全局地思考、设计和实现。这是一个过程,需要大量的时间,思考和学习,还有实践。

分享到:
评论

相关推荐

    Java面向对象设计最佳实践 - 方法设计(一).docx

    Java面向对象设计最佳实践 - 方法设计(一)

    Java面向对象设计最佳实践_-_内置类设计

    Java面向对象设计最佳实践_-_内置类设,是开发者的必备文档

    深入理解Java 7:核心技术与最佳实践-成富.epub

    本书面向的主要读者是具备一定 Java 基础的开发人员和在校学生。本书中不涉及 Java 的基本语法,因此不适合 Java 初学者阅读。如果只对 Java SE 7 中的新特性感兴趣,可以阅读第 1 章到第 6 章;如果对 Java 中的...

    Java 实现的面向对象软件设计模式

    设计模式代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临 的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误...

    DesignPattern:设计模式代表了经验丰富的面向对象软件开发人员所使用的最佳实践。设计模式是针对软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是在相当长的一段时间内由众多软件开发人员通过反复试验而获得的

    设计模式代表了经验丰富的面向对象软件开发人员所使用的最佳实践。设计模式是针对软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是由众多软件开发人员在相当长的一段时间内通过反复试验而获得...

    java设计模式-访问者模式

    设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段...

    DesignPattern:经验丰富的面向对象软件开发人员使用的最佳实践

    设计模式经验丰富的面向对象软件开发人员使用的最佳实践。

    Java.In.A.Nutshell 7th Covers Java11.pdf

    Chock充满了演示如何充分利用现代Java API和开发最佳实践的示例,这本经过全面修订的书籍包含有关Java Concurrency Utilities的新资料。 本书的第一部分提供了Java编程语言和Java平台的核心运行时方面的快节奏,...

    java设计模式-桥接模式

    设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段...

    Java设计模式导读.pdf

    一本使用Java语言讲述设计模式的电子书,设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。

    java设计模式-复合模式

    设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段...

    java设计模式-中介者模式

    设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段...

    java百万英雄源码-Django-Design-Patterns-and-Best-Practices:《Django设计模式与最佳实践》2

    java百万英雄源码 简介 版权协议 除注明外,所有文章均采用 协议发布。 这意味着你可以在非商业的前提下...在Django中,模型就是类,该类提供了一种处理数据库的面向对象方法。通常,每个类都引用一个数据库表,每个

    java设计模式-命令模式

    设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段...

    java设计模式-责任链模式

    设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段...

    java设计模式-解释器模式

    设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段...

    java设计模式-备忘录模式

    设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段...

    java设计模式-原型模式

    设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段...

    java设计模式-状态模式

    设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段...

    java设计模式-工厂模式

    设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段...

Global site tag (gtag.js) - Google Analytics