适配器模式
场景:一个接口具有多种抽象方法而我们要定义并实现这个接口的类只关心其中某些方法,这时实现所有方法太繁琐
目的:通过适配器(抽象类),先实现一部分不必要的方法,空方法.关心的方法交由子类去实现扩展.
具体见后文案例.
面向接口编程
目的:降低程序的耦合度
匿名内部类
用一小块代码,来完成类的继承,实现,以及创建对象的过程.
(如果类只需定义一次,不进行复用,采用匿名内部类比较方便).
/*
* 适配器模式,匿名内部类,面向接口编程
*/
//监听器接口
interface Listener{
public void onClick();
public void onDbClick();
public void onDown();
public void onUp();
}
//适配器实现监听器接口的一些不必要的空方法,使得我们只用关注需要自定义/改变的方法
abstract class ListenerAdapter implements Listener{
public void onDbClick(){}
public void onDown(){}
public void onUp(){}
}
//按键类,包含成员变量监听器对象以及点击方法
class Button{
private Listener l;
public void addListener(Listener l){
this.l = l;
}
public void click(){
this.l.onClick();
}
public void dbClick(){
this.l.onDbClick();
}
}
class AdapterDemo{
//主函数
public static void main(String[] args){
//创建两个button对象
Button btn = new Button();
Button btn2 = new Button();
//接口======>继承,实现,重写了ListenerAdapter,并以接口变量引用
Listener l = new ListenerAdapter(){ //面相接口编程,降低耦合度
public void onClick(){
System.out.println("click one time!");
}
public void onDbClick(){
System.out.println("click two times!");
}
};
//实现监听器的复用
btn.addListener(l);
btn.click();
btn.dbClick();
btn2.addListener(l);
btn2.click();
btn2.dbClick();
}
}