2

私には3つのクラスがあります:

  1. ZookeeperAccessインターフェースです
  2. AbstractZookeeperAccessZookeeperAccessを実装します
  3. 拡張するクラスですAbstractZookeeperAccess

3番目のクラスの良い名前は何でしょうか?

私はを使用ZookeeperAccessImplしますが、これは最良の名前ではないと思います。ヒントは、を実装するだけで ZookeeperAccess、拡張はしませんAbstractZookeeperAccess

ps:現在ZookeeperAccessImpl拡張されているクラスはこれだけAbstractZookeeperAccessです。

抽象クラスを使用してインターフェース用のコードを実装し、ZookeeperAccessImplが拡張するためのabstactとなるコードを提供します。

質問をもう一度更新します。ありがとう

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

クラス名には、クラスの機能が明確に示されている必要があります。そのため、-prefix I(インターフェイス用)またはImpl-suffixが必要な場合は、おそらく何か間違ったことをしていることになります。

インターフェイス名には、その使用方法を記載する必要があります(例Map)。クラスの主な目的がインターフェースの実装である場合、その実装について具体的なことを言う必要があります(例HashMap)。この場合、すべての変数とメンバーをインターフェイスタイプとして宣言する必要があり、クラスはインスタンス化にのみ使用されます(具体的な実装が重要でない限り、そうではありません)。

Impl意味のある実装は1つだけであることを示唆しています。もしそうなら、なぜあなたはインターフェースが必要なのですか?(考えられる答えは次のとおりです。APIのユーザーから実装を隠したいのですが、Sun Oracleはそれをたくさん行います。)

デフォルトの実装を提供したいだけの場合(APIユーザーがより効率的なソリューションを考え出すことを期待しているため)、、、DefaultまたはSimple-はDirectどうZookeeperAccessですか?

抽象クラスの場合、私はBase-suffix(たとえばZookeeperAccessBase)を使用することを好みます。これは、ほとんどのIDEのオートコンプリートでより適切に機能します。

于 2012-08-15T07:59:15.297 に答える
1

名前は、実装が何をするかを説明する必要があります。この実装は、抽象クラスを拡張し、別のクラスに委任することで実行できます...

たとえば、 in java.utilLinkedListおよびArrayListimplententsListおよび ... extends AbstractList

于 2012-08-15T07:20:26.223 に答える
1

クラス名が抽象クラスを拡張することを暗示する必要があるのはなぜだと思いますか?

適切なクラス名については、通常、各クラスの実装固有を示す接頭辞を使用します。

たとえば、EmployeeDaoのインターフェース、

BaseEmployeeDaoの抽象クラスで

実装の名前は次のようになります。

  • PostgresEmployeeDao
  • OracleEmployeeDao
  • MongodbEmployeeDao
  • シリアル化EmployeeDao
于 2012-08-15T07:23:18.860 に答える