1、概念
缺省适配模式为一个接口提供缺省实现,这样子类型可以从这个缺省实现进行扩展,而不必从原有接口进行扩展。开发中BaseAdapter实现ListAdapter就是使用这种设计模式。
2、运用
一个接口有很多抽象方法,当要写接口的实现类,就必须要实现接口中很多无关的抽象方法,这时就可以使用缺省适配模式,设计一个抽象的适配器类实现接口,并为所有方法提供空实现。用户类只需要继承适配器类,实现必要的方法就可以了。
模式所涉及的角色有:
InterfaceA:目标接口。可能定义有很多方法,但这些方法不一定全都被用户类所需要。
AbstractClassB:缺少适配模式的核心。它实现InterfaceA接口,为所有方法提供空的实现。
ClassBImpl:用户类,它需要实现InterfaceA接口。但因为InterfaceA方法众多,而ClassBImpl中对其中一两个方法(比如这里的Fun1())感兴趣。如果直接实现InterfaceA,就需要提供众多的空方法。所以它继承AbstractClassB,只需要重写它感兴趣的方法即可。既实现了InterfaceA接口,又省去了定义空方法的麻烦。
public interface InterfaceA{ void fun1(); void fun2(); void fun3(); void fun4(); void fun5(); } |
以上代码定义了目标接口,接下来创建一个抽象的适配器类实现接口。
class AbstractB implements InterfaceA{ @Override public void fun1() {}
@Override public void fun2() {}
@Override public void fun3() {}
@Override public void fun4() {}
@Override public void fun5() {} } |
观察以上代码可知,抽象的适配器类实现了目标接口,并给所有的方法提供空实现。
此时我们只需创建抽象类的子类,实现自己感兴趣的方法即可。
class ClassBImpl extends AbstractB{ @Override public void fun1() { super.fun1(); } } |