4

特定の種類のオブジェクトの管理を担当するマネージャー クラスがあります。そのためには、これらのオブジェクトを操作する必要がありますが、これらのオブジェクトはマネージャとはまったく関係がないため、技術的に設計すると、「project.managers」と「project.objects」という別のパッケージになります。重要なことは、問題のオブジェクトはマネージャーだけが操作でき、それ以外の場所では操作できず、プロジェクト内の他のすべてのクラスからアクセスできる必要があるということです。

そのため、マネージャーにはメソッドの操作にアクセスできるようにしてもらいたいのですが、他のすべてのクラスへのアクセスは制限してください。最も明白な方法は、マネージャー クラスとオブジェクト クラスを同じパッケージに移動し、操作メソッドを保護することを宣言することですが、マネージャーとオブジェクトは完全に別個のエンティティであるため、哲学的には適合しません。

(これは、問題のオブジェクトのコードをオートコンプリートするたびに IDE が操作メソッドを表示しないようにするためです。そのため、問題のオブジェクトを変更するたびに対応するテーブルが正しく更新されるように、常にマネージャーを経由する必要があります) .

それに対するアイデアはありますか、それとも明白な方法がいずれにせよ最良の方法ですか?

4

3 に答える 3

4

と呼ばれるインターフェースを持たない理由

ManagerFunctions

と呼ばれる別の

ClientFunctions

管理対象オブジェクトは、これらの両方を実装します。

管理対象オブジェクトを作成するときは、それらを への参照としてのみ渡しますClientFunctions。ただし、マネージャ オブジェクトはそれらを として参照しManagerFunctions、その結果、「管理された」機能にアクセスできます。適切なキャストは、適切なメソッドを公開するだけです。

IDE は、これらのオブジェクトがどのように参照されているかに応じて、適切なメソッドを自動的に提示します。

于 2012-11-19T14:16:35.433 に答える
0

C++ の「フレンド」宣言に似たものを求めていますが、Java には直接同等のものはありません。パッケージの可視性が最も近いです。または、XML DOM のようなモデルを使用することもできます。このモデルでは、パブリックにする必要があるメソッドがインターフェイスで定義され、すべてのクライアント アクセスがこれらのインターフェイスを介して行われます。マネージャーは実装の具象クラスを知っているため、必要に応じてそれにダウンキャストできます。

于 2012-11-19T14:18:20.003 に答える
0

そのため、マネージャーにはメソッドの操作にアクセスできるようにしてもらいたいのですが、他のすべてのクラスへのアクセスは制限してください。最も明白な方法は、マネージャー クラスとオブジェクト クラスを同じパッケージに移動し、操作メソッドを保護されていると宣言することです...

技術的には、操作メソッド パッケージを保護 (修飾子なし) と宣言します。保護されたメソッドを使用すると、クラスを簡単に拡張できます。

しかし、マネージャーとオブジェクトは完全に別個のエンティティであるため、哲学的には適合しません。

理解します。Java には、C++ にある "friend" 宣言がありません。

操作方法にコメントすることはできますが、それでは Eclipse の問題は解決しません。

于 2012-11-19T14:18:47.173 に答える