假设一个场景
一个业务有多种场景,需要多个实现类,每个类实现的方法不一样,但是想共用一个接口。应该如何设计
方法一:
定义一个接口类A,用虚拟抽象类B实现接口A,然后多个实现类分别继承B。同时由于部分实现场景不能执行特地方法,将B实现全部报错,让实现类分别去实现各自需要的方法
public interface A2Service {
void sing();
void song();
}
public class A2AbstractService implements A2Service{
@Override
public void sing() {
System.out.println("sing not support");
}
@Override
public void song() {
System.out.println("song not support");
}
}
public class A2ServiceImpl1 extends A2AbstractService{
@Override
public void sing() {
System.out.println("A2ServiceImpl1 sing");
}
}
public class A2ServiceImpl2 extends A2AbstractService{
@Override
public void song() {
System.out.println("A2ServiceImpl2 song");
}
}
方法二:
定义一个接口类A,接口方法声明为default。同时由于部分实现场景不能执行特地方法,default方法内部执行全部报错,让实现类分别去实现各自需要的方法
public interface A1Service {
default void sing() {
System.out.println("sing not support");
}
default void song() {
System.out.println("song not support");
}
}
public class A1ServiceImpl1 implements A1Service{
@Override
public void sing() {
System.out.println("A1ServiceImpl1 sing");
}
}
public class A1ServiceImpl2 implements A1Service{
@Override
public void song() {
System.out.println("A1ServiceImpl2 song");
}
}