3

私のプロジェクトには、外部リソース (つまり、画像と音声ファイル) をロードするために使用されるクラスがあります。getImage(reference)このクラスには、リソースを格納するための HashMap フィールドや、リソースを取得するためのメソッドなど、いくつかのメンバーしかありません。

私はもともとシングルトン パターンを実装していましたが、リンク先のページでいくつかの批判を読み、静的メンバーの使用を検討しました。

すべてのクラス機能を静的に実装することを喜んで決定した後、私はコードのクリーンアップを行っていました。ResourceManagerこれを行っているときに、このクラスのインスタンス化を妨げるものは何もないことに気付きました。これにより、abstractキーワードでタグ付けするようになりました。

私はこれまでabstractこのように使用したことがありません。私は、継承ツリーに対してより慣例的に適用しただけです。の使用と誤用を Google で調べてabstractみましたが、見つかったすべてのリソースは信頼性に欠けるか、次のような抽象の使用を推奨していませんでした。

抽象クラスとメソッドに関する Oracle のチュートリアル。
キーワードについて議論している別のサイト。

2 番目のリンクからの引用: 「その目的は、純粋にクラスの親として機能することです。」

私の新しい実装は、慣習的か、許されるか、それとも単純に間違っているか?

4

3 に答える 3

8

コンストラクターをprivateにするだけで、抽象化する必要はありません。Abstractは、このクラスが拡張用であることを開発者に伝えますが、これはあなたの例には当てはまりません。

private ResourceManager() {
}
于 2013-06-12T09:55:23.717 に答える
3

私があなたなら、次のようにコンストラクターを非表示にします。

private ResourceManager() {}
于 2013-06-12T09:55:06.337 に答える
1

静的メンバーしかないため、クラス抽象を宣言するのは不適切な設計ですか?

はい。

これを final にして、プライベート コンストラクターのみを指定します。

于 2013-06-12T11:19:57.393 に答える