1、适配器模式所要解决的问题:
public void open(){
System.out.println("窗口打开。") ;
}
public void close(){
System.out.println("窗口关闭。") ;
}
};
public class AdapterDemo{
public static void main(String args[]){
Window win = new WindowImpl() ;
win.open() ;
win.close() ;
}
};
对于java程序来说,如果一个类A要实现一个接口B。则肯定要覆写此接口中的全部抽象方法,那么如果此时在一个接口中定义的抽象方法过多,但是在子类A中又用不到这么多的抽象方法,则肯定很麻烦,所以此时就需要一个中间过渡的类C,这个类就是适配器类。适配器类是一个抽象类。
在使用的时候,类A就不再直接去实现接口B,而是继承那个适配器类C。C实现了接口A。C必须覆写B中的所有方法,而A就不需要再覆写适配器C中的所有方法了。
2、适配器模式的例子:
interface Window{ // 定义Window接口,表示窗口操作
public void open() ; // 打开
public void close() ; // 关闭
public void activated() ; // 窗口活动
public void iconified() ; // 窗口最小化
public void deiconified(); // 窗口恢复大小
}
public void open() ; // 打开
public void close() ; // 关闭
public void activated() ; // 窗口活动
public void iconified() ; // 窗口最小化
public void deiconified(); // 窗口恢复大小
}
//适配器类实现了上面的接口类,需要覆写接口里面所有的方法
abstract class WindowAdapter implements Window{
public void open(){} ; // 打开
public void close(){} ; // 关闭
public void activated(){} ; // 窗口活动
public void iconified(){} ; // 窗口最小化
public void deiconified(){};// 窗口恢复大小
};
class WindowImpl extends WindowAdapter{
abstract class WindowAdapter implements Window{
public void open(){} ; // 打开
public void close(){} ; // 关闭
public void activated(){} ; // 窗口活动
public void iconified(){} ; // 窗口最小化
public void deiconified(){};// 窗口恢复大小
};
class WindowImpl extends WindowAdapter{
//继承的是适配器类WindowAdapter,
不需要覆写WindowAdapter
的所有抽象方法。
public void open(){
System.out.println("窗口打开。") ;
}
public void close(){
System.out.println("窗口关闭。") ;
}
};
public class AdapterDemo{
public static void main(String args[]){
Window win = new WindowImpl() ;
win.open() ;
win.close() ;
}
};