2016-05-04 10 views
1

だから私は現在にする必要がある任意のオブジェクトによって実装されることを意図インタフェース、Rentableを、持っている、よく、三つの方法賃貸ました:シングは、このインタフェースを実装するクラスでは、ここで私の場合、単一メソッドのインターフェイスが本当に良いアイデアかどうか判断するのに苦労していますか?

boolean isRented(); 

void rent(); 

void terminateRental(); 

です、実装オブジェクトのレンタルと終了の能力は実際にはパッケージプライベートでなければなりませんが、クラス構造を最初に書くときは明らかに私はこれを認識しませんでした。

別々のレンタルマネージャークラスがRentableを借りて、それを借りて個人を表す別のオブジェクトと関連付けるためのパブリックメソッドを提供している、そしてこのクラスは本当にRentablerentterminateRentalメソッドを呼び出すべきである唯一のものですオブジェクト自体。明らかに、他のクラスがオブジェクトのレンタルされたステータスを、レンタルしている人から切り離さずに公に操作できるかどうかは、問題です。

だから本当にインターフェイスからこれらの最後の2つの方法は、パッケージ-privateである必要がありますので、明らかに彼らは、インターフェイスから出てくる必要があるが、その後インタフェースをしている:

public interface Rentable { 

    boolean isRented(); 

} 

...本当に良いですアイデアや良い練習?私はシングルメソッドのインターフェースを見てきましたが、それが良いアイデアであるかどうかはわかりませんが、このような状況にはあまり関係がありません。私には多少間違っているようですが、オブジェクトをレンタルする必要があるという事実は、変更する方法が書かれている必要があることを意味しますが、将来的にRentableになる他のオブジェクトをサポートすることができます潜在的に他のタイプの車両またはサービスをレンタルすることができる)。しかし、私はちょうど良い練習がこれであるかどうか、またはこのような状況で私が見ていないいくつかの種類の代替があるかどうか分からないのですか?

+0

状況によっては、ゼロメソッドインタフェースが必要になることがあります。あなたの場合、私は単一のメソッドインターフェースが保証されていると言います。あなたが本当にしたいことは、あなたの前にあるオブジェクトがレンタル可能であることを安全に知ることができることです。したがって、インタフェースimhoは保証されています。 –

+0

インタフェースが特定のメソッド/プロパティを保証する契約である場合、おそらく単一のメソッドインタフェースが正しいでしょう。あなたのインターフェースを実装するクラスのために、より一般化された方法で必要なものがない限り。 – Machtyn

答えて

2

シングルメソッドインターフェイスには本質的に間違ったものはありません(また、標準ライブラリにはいくつかのものが含まれていますが、そうでないものもあります)。顧客に保証するために実装が必要なのは、レンタルされているかどうかを伝える能力だけであれば、あなたが提案しているインターフェースは問題ありません。

インターフェイスにはメソッドだけでなく、インターフェイスもあります。インターフェイスはです。タイプです。このインタフェースを、変数、メソッドパラメータ、および/または戻り値型の宣言された型または型パラメータとして使用していない場合は、実際にはそれほど多くは得られません。

関連する問題