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(); } } |