2

我有三个班级:

  1. ZookeeperAccess是接口
  2. AbstractZookeeperAccess实现 ZookeeperAccess
  3. 是一个扩展的类AbstractZookeeperAccess

三等舱的好名字是什么?

我使用ZookeeperAccessImpl,但我想这不是最好的名字,它暗示只实现了 ZookeeperAccess,而不是 extends AbstractZookeeperAccess

ps:ZookeeperAccessImpl是现在唯一扩展的类AbstractZookeeperAccess

我使用抽象类来实现一些接口代码,并提供一些抽象代码供 ZookeeperAccessImpl 扩展。

我再次更新问题。谢谢

4

4 回答 4

2

您拥有的事实AbstractZookeeperAccess意味着有多个子类可以实现每种类型ZookeeperAccess,因此请在子类名称前加上类型的前缀。

例如,给定:

interface ZookeeperAccess
AbstractZookeeperAccess implements ZookeeperAccess

你可能有

FullTimeZookeeperAccess extends AbstractZookeeperAccess
PartTimeZookeeperAccess extends AbstractZookeeperAccess
TemporaryZookeeperAccess extends AbstractZookeeperAccess
于 2012-08-15T07:23:15.950 回答
1

名称应该解释实现的作用。这个实现可以通过扩展一个抽象类,委托给另一个......

例如 in java.util, LinkedListand ArrayListimplententsList和 ... extends AbstractList

于 2012-08-15T07:20:26.223 回答
1

为什么你认为类名需要暗示它扩展了抽象类?

对于适当的类名,我通常使用一个前缀来显示每个类的特定实现。

例如EmployeeDao的一个接口,

带有BaseEmployeeDao的抽象类

并且实现的名称可能是这样的:

  • PostgresEmployeeDao
  • OracleEmployeeDao
  • MongodbEmployeeDao
  • 序列化EmployeeDao
于 2012-08-15T07:23:18.860 回答
1

类名应该清楚地说明类的作用,所以当你需要一个-prefix I(用于接口)或一个Impl-suffix 时,你可能做错了什么。

接口名称应说明如何使用它(例如。Map)。如果一个类的主要目的是实现一个接口,它应该说明一些具体的实现(例如。HashMap)。在这种情况下,所有变量和成员都应该声明为接口类型,并且该类仅用于实例化(除非具体实现很重要,它不应该)

Impl表明只有一种有意义的实现。如果是这样,你为什么需要一个接口呢?(一个可能的答案可能是:我想对 API 的用户隐藏实现,Sun Oracle 经常这样做。)

如果您只想提供默认实现(因为您希望 API 用户提出更有效的解决方案),那么Default,SimpleDirect-ZookeeperAccess呢?

对于抽象类,我更喜欢使用Base-suffix(例如 . ZookeeperAccessBase),它更适合大多数 IDE 的自动完成。

于 2012-08-15T07:59:15.297 回答