1

現在、Android Game Engine ライブラリを作成しています。基本クラス (拡張される) には 2 つのWSLogオブジェクト (Android Log クラス メソッドのラッパー) が含まれます。1 つは呼び出されgameEngineLog(ゲーム エンジン プロジェクトでのみ表示される必要があります)、もう1 つは呼び出されgameLogます (ゲーム エンジン プロジェクトと実際のゲーム プロジェクトで表示される必要があります)。

基本クラスでは、getter メソッドを使用して両方のログを取得できます。

クラスのメンバーへのアクセスの制御を読んで、ゲーム エンジン プロジェクトでのみ表示されるようにするためにどの修飾子を前に配置する必要があるかを理解しましたが、どのgetGameEngineLog()修飾子 (パブリック、プロテクト、デフォルト、またはプライベート) もありません。私のニーズに合わせてください。

gameEngineLog実際のゲーム プロジェクトではなく、ゲーム エンジン プロジェクト全体でのみオブジェクトを表示するにはどうすればよいですか?

注: ゲーム エンジン プロジェクトの他のすべてのコンポーネント (クラス) は、基本クラスへの参照を保持します (一部は異なるパッケージに含まれます)。私が欲しいのは、それらのクラスがgameEngineLogオブジェクトへの参照を持っていることだけです。どんなアプローチでも大歓迎です。

視覚的な表現は次のとおりです。

ここに画像の説明を入力

前もって感謝します。

4

1 に答える 1

0

@JB Nizet が言うように、ゲーム エンジン クラスとゲーム クラスには異なる基本クラスが必要なようです。これらのクラスは、共通の基本クラス ( を持つgetGameLog) を引き続き共有できます。少なくとも、ゲーム エンジン クラス用の個別のサブクラスが存在する可能性があります。

この基本クラスのサブクラスのみが にアクセスする必要がある場合はgetGameEngineLog、ゲーム エンジン クラスのサブクラスで保護されたメンバーとして導入できます。

これが他のクラス (ただし、ゲーム エンジン内のクラスのみ) から呼び出し可能にすることを意図しており、package-private がそれを実行できない場合、1 つのアプローチは、このログを使用できるすべてのクラスに、ログへのアクセスを提供するオブジェクトを与えることです。ゲーム エンジン オブジェクト。

たとえば、ログへのアクセスが中央のポイントから制御され、実装が不十分なゲームがログにアクセスできないようにする必要がある場合 (ハッキングによっても)、プロジェクトはシングルトンを作成できます。ロギングが行われ、ログにアクセスできる他のオブジェクトを (直接的または間接的に) 作成し、それらにロギング機能を持つオブジェクトを与えることができます。

ログへのアクセスを提供するオブジェクトを実装する 1 つの方法は、(ゲーム エンジンのみが作成できるように) プライベート コンストラクターを持つゲーム エンジン クラスの内部クラスのインスタンスにすることです。

于 2013-04-21T18:10:05.383 に答える