介绍
大家所熟悉的是如果实现某一个接口,必须实现接口中的每一个方法。在适配器模式中,如果目标(Target)角色中的方法众多,需要的仅仅几个。但是根据接口的实现规则,其余的方法也必须实现,这必然造成了很多的不便,最突出的就繁琐。
这种情况下,可以考虑实现个默认适配器,然后实际的实现目标角色接口的类可以集成这个默认适配器,然后重写默认实现的方法即可。
定义
缺省适配模式为一个接口提供缺省实现,这样的类型可以从这个缺省实现进行扩展,而不必从原有接口进行扩展。当原接口中定义的方法太多,而其中大部分又不被需要时,这种模式非常实用。由缺省适配器类直接实现目标(Target)角色接口,并为所有方法提供缺省的空实现。用户类就只需要继承适配器类,只实现感兴趣的方法就行了。
UML类图
目标(Target)角色:目标接口。可能定义有很多方法,但这些方法不一定全都被用户类所需要。
缺省适配器(Default Adapter):缺省适配模式的核心。它实现Target角色接口,为所有方法提供空的实现(也就是{}的空实现)。
Client:用户类,继承于缺省适配器,实现Target角色接口中感兴趣的方法。
示例代码
目标(Target)角色
public interface SubjectTarget {
void learnChinese();
void learnEnglish();
void learnMath();
void learnBiological();
}
缺省适配器(Default Adapter)
public abstract class SubjectAdapter implements SubjectTarget {
@Override
public void learnChinese() {
}
@Override
public void learnEnglish() {
}
@Override
public void learnMath() {
}
@Override
public void learnBiological() {
}
}
Client
public class StudentA extends SubjectAdapter {
@Override
public void learnMath() {
super.learnMath();
System.out.println("just learn Math");
}
}
public class StudentB extends SubjectAdapter {
@Override
public void learnChinese() {
super.learnChinese();
System.out.println("just lear Chinese");
}
}