【发布时间】:2023-03-17 02:59:01
【问题描述】:
来自 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?
【问题讨论】:
标签: java oop solid-principles interface-segregation-principle