インターフェイスは柔軟性の点で優れています。しかし、インターフェイスが多数のクライアントによって使用される場合。古いメソッドをそのまま維持しながら新しいメソッドをインタフェースに追加すると、新しいメソッドがクライアントに存在しないため、すべてのクライアントのコードが破られます。以下に示すように:インターフェイスは時間とともに進化しますか?
いつか後で、このインターフェイスに別の方法を追加すると、すべてのクライアントのコードが破損します。私たちは、明示的にすべてのクライアントのコードで新しいメソッドを実装する必要があり、これを回避するために
public interface CustomInterface {
public void method1();
public void method2();
}
。
だから私は、次のようにインタフェースと、このシナリオを考える:追記
- インタフェースは石に彫刻のようなものです。彼らはめったに想定されず、変化することが予想されます。そしてもしそうなら、プログラマーが準備しなければならない膨大なコスト(コード全体を書き直す)が必要です。
- 上記の点を引き続き、時間のテストに耐えられるインターフェイスを作成することは可能ですか?
- このようなシナリオは、今後追加機能が期待されるインターフェイスでどのように処理されますか?これは、すべてのクライアントが拘束されている契約の変更を予期しています。
EDIT:Default
実際には、多くの人がその答えで言及しているJavaインターフェイスには素晴らしい方法です。しかし、私の質問はコード設計の文脈の中でより多くのものでした。また、メソッドの実装をクライアント上で強制的に行うことは、インターフェイスの本質的な特徴です。しかし、インタフェースとクライアントの間のこの契約は機能が最終的に進化するにつれて脆弱に見えます。
提案を読んでください:フレームワーク設計のガイドライン(.netですが、それはJavaプログラマーのためにも読んでおいてください)は、クラスまたはインタフェースの間のchosingについてのセクションがあります。他の答えで述べたように、クラスはインターフェイスよりも柔軟性があり、クライアントコードを壊さずに進化させるため、クラスの使用についても話しています。 –