SOLIDからインターフェイス棲み分け原理は、クラスが/実装する必要があり、彼らが必要としない方法に依存してはならないと言っています。あなたは持っているべきではありません//Not used: just needed to implement interface
コードベースに。
実装クラスは、特定のコーナーケースであるため、どのように私はいくつかの方法がその性質上、「オプション」です。この原則を適用します。
私は、このインターフェイスの例を持っていると言います。
Interface Input {
Input create();
void capitalizeInput(CAPITALIZATION cap);
String getInput();
}
Class LatinInput implements Input {
String input;
Input create(String input){...}
void capitalizeInput(CAPITALIZATION cap){...}
String getInput(){...}
}
Class NumberOnlyInput implements Input {
int input;
Input create(int input){...}
void capitalizeInput(CAPITALIZATION cap){
// Needed because the interface requires it.
return;
}
String getInput(){...}
}
そのインターフェースは、他のクラスでのプログラムで広く使用されています。現在、私のプログラムの中で、私は次のようなものをやっています。
Class B {
Input input;
B(Input input){
this.input = input;
}
String doStuff(){
...
methodA();
...
methodB();
...
methodC();
...
methodA();
...
return ...;
}
private void methodA(){
...
input.transformInput(CAPITAL);
input.getInput();
}
private void methodB(){
...
input.getInput();
}
private void methodC(){
...
input.transformInput();
}
}
そして、それはCLAS Cによって呼び出されます。
Class C {
void doStuff() {
List<A> list = new Arraylist<>();
list.add(LatinInput.create("hello"));
list.add(LatinInput.create("goodbye"));
list.add(NumberOnlyInput.create(12345));
for(Input input: list){
B b = new B(a);
b.doStuff();
}
}
}
また、オブジェクトがあるかどうかを確認する必要がないながら、どのように私は、クラスCを変更せずに、ISPに準拠するための設計を変更する必要がありinstance of
、実行時に?
何のクライアントが使用していない方法に依存することを強制すべきではないと述べています。
これは、空のボディを持つメソッドの実装については何も言いません。あなたのクラスのB
用途は両方capitalizeInput
とgetInput
、限り、それらは唯一の2つの方法があるとしてInput
、それはインターフェイス分離の原則に違反しません。あなたのケースでB
の使用NumberOnlyInput.capitalizeInput
、ちょうどそうempy体は、この機能の有効な実装であることを起こります。
しかし、Input.create
ISPに違反しません。B
依存しますInput
が、使用していませんInput.create
-それはまったく呼び出されません。その場合は、あなただけのインターフェイスから削除することができます。
あなたはまだその奇妙な空のメソッドを取り除くことができます。以来NumberOnlyInput
の特殊なケースでLatinInput
、そのクラスを再利用することができます:
class NumberOnlyInput {
static Input create(int input) {
return new LatinInput(String.valueOf(input));
}
}
それはあまり鮮明なまたはパフォーマンスのかもしれない - 数字のための特別なケースが最初の場所で作成された理由であるかもしれません。