首页 > 代码库 > 设计模式-缺省适配类.

设计模式-缺省适配类.

在有些时候,如果我们不准备实现一个接口的全部方法时,因为我们这个类不需要用到接口中所规定的其他方法,我们按照如上的方式实现一些要用到的方法,没用的方法空实现。

很明显这是一种浪费,甚至是一种混乱。除非看过空方法的代码,否则不知道其不是空的,即使知道一些方法是空的,但不确定哪些方法是空的,哪些不是空的。这个时候我们可以考虑使用一个中间类来解决这个问题,这个中间类空实现接口的所有方法,同时,我们将这个中间类定义为抽象的,使其不可能被实例化,实例化中间过渡类没有任何实际的意义。 然后让具体的类继承这个中间类只让他覆盖自己所需的方法即可。

我们将这个中间过渡类称为 “缺省适配类”,这个模式也叫做缺省适配模式(Default Adapter)。

  1. interface Study  
  2. {  
  3.  public void StudyGrade1();  
  4.  public void StudyGrade2();  
  5.  public void StudyGrade3();  
  6.  public void StudyGrade4();  
  7.  public void ThesisPresentation();  

上个例子,我们增加一个缺省适配抽象类StudyAdapter

public abstract class StudyAdapter implements study
{
 public void StudyGrade1(){}
 public void StudyGrade2(){}
 public void StudyGrade3(){}
 public void StudyGrade4(){}
 public void ThesisPresentation(){};
}

下面我们来看不同的具体类怎么使用这个缺省适配类.
普通的全日制大学生 GeneralStudent:

public class GeneralStudent extends StudyApater {  public GeneralStudent(){}

 public void StudyGrade1(){     System.out.println("读大学一年级");  }

 public void StudyGrade2(){     System.out.println("读大学二年级");  }

 public void StudyGrade3(){     System.out.println("读大学三年级");  }

 public void StudyGrade4(){     System.out.println("读大学四年级"); 

 public void ThesisPresentation(){

     System.out.println("修满了学分,参加论文答辩");    } }

 提前修满学分特殊的大学生SpecialStudent:

public class SpecialStudent extends StudyApater {  public SpecialStudent(){}

 public void StudyGrade1(){     System.out.println("读大学一年级");  }

 public void StudyGrade2(){     System.out.println("读大学二年级");  }

 public void StudyGrade3(){     System.out.println("读大学三年级");  }

 public void ThesisPresentation(){

     System.out.println("修满了学分,参加论文答辩");    } }

 读到大二就退学的大学生DiscontinueStudyStudent:

public class DiscontinueStudyStudent extends StudyAdapter {  public DiscontinueStudyStudent(){}

 public void StudyGrade1(){     System.out.println("读大学一年级");  }

 public void StudyGrade2(){     System.out.println("读大学二年级");  }

}

 

如此一来,方便很多。程序逻辑更清晰明了了。

在java API中 就有很多类似的例子。比如java.awt.WindowAdapter  它就空实现了接口WindowListener的全部方法,它就是一个缺省适配类。

java.awt中很多的缺省适配类,可以自己看下。

设计模式-缺省适配类.