【发布时间】:2016-04-02 20:54:52
【问题描述】:
我不了解接口隔离原则 (ISP)。
public interface SenderAndSaver {
void send();
void save();
}
public class Sender1 implements SenderAndSaver{
@Override
public void send() {
// do something
}
@Override
public void save() {
// do something
}
}
public class Sender2 implements SenderAndSaver{
@Override
public void send() {
// do something
}
@Override
public void save() {
// do something
}
}
public class Saver1 implements SenderAndSaver{
@Override
public void send() {
// do something
}
@Override
public void save() {
// do something
}
}
public class Saver2 implements SenderAndSaver{
@Override
public void send() {
// do something
}
@Override
public void save() {
// do something
}
}
所以,我有一个“胖”界面。我有 4 个实现该接口的类。接下来,客户端类按如下方式使用它们:
public class SenderClient {
public void someMethod(SenderAndSaver sas){
sas.send();
}
}
public class SaverClient {
public void someMethod(SenderAndSaver sas){
sas.save();
}
}
一个客户端只需要方法send(),其他客户端只需要方法save()。听说如果send()方法改了,比如加个参数,会影响SaverClient。但为什么?主要思想是SaverClient 不使用方法send()。否则,如果所有客户都使用所有方法,则接口不会很胖。但是如果SaverClient不使用send ()的方法,send ()的变化对SaverClient会有什么影响?
【问题讨论】:
-
为什么发送方要实现save()方法?为什么储户要实现 send() 方法?客户端(没有实现任何东西)与 ISP 有什么关系?
标签: java oop solid-principles