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();
}
}
它被 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();
}
}
}
我应该如何更改设计以符合 ISP,而不更改 C 类,同时也不需要检查对象是否instance of
在运行时?