java定義接口監聽器詳解


按鈕作為一個公共組件,每個按鈕點擊時的行為是不一樣,可能是刪除按鈕,也可能是查詢按鈕,也可能是其他功能,對於這種不確定的功能,如何在設計按鈕組件時來編寫代碼呢?
public class Button {

public void click(){
}
}
復制代碼
有兩種方式,第一種方式,把Button類設計成抽象類,click方法設計為抽象方法,由具體的子類來實現不同的click行為,然而這種方法很明顯不可行,如果一個系統中有100個按鈕,難道要定義100個Button子類?對於Button這種微型組件來說這樣的設計方案太重量級了,不合適,那還有什么更好的方式嗎?


那就是第二種方式,接口!
既然每個按鈕的行為是不一樣的,但是有一定是共同的,那就是按鈕的單擊方式是相同的,我們據此可以設計一個OnClickListener接口來描述這種統一的行為,統一的約定
public interface OnClickListener {
public void onClick();
}

對於Button類來說,如何使用這種接口呢?這里又有兩種方法,一種方案是Button類實現這個接口,然而這樣做的話和上面的問題就一樣了,我們常說一句話,組合優先於繼承(實現),那么我們的另外一種方案就是:讓Button類持有一個OnClickListene類型的成員
public class Button {
private OnClickListener onClickListener;

public void click(){
onClickListener.onClick();
}


public void setOnClickListener(OnClickListener onClickListener) {
this.onClickListener = onClickListener;
}

}
如此一來,當點擊按鈕的時候,實際上觸發的是接口的實現類操作,Button類僅僅依賴於一個特有的接口,至於這個接口是什么樣的,可以由使用Button類的一方來自定義,如此一來,Button類的編寫不需要依賴於具體的實現,而是依賴於抽象接口,這就實現了類於類之間的松散耦合,這就是awt和swing中常用的監聽器模式

如何使用就很簡單了

Button queryButton = new Button();

OnClickListener onClickListener = new OnClickListener() {

@Override
public void onClick() {
System.out.println("執行查詢操作");

}
};

queryButton.setOnClickListener(onClickListener);

//模擬按鈕被點擊的操作
queryButton.click();
http://bbs.bertoon.com/thread-1403-1-1.html 原創文章,轉載請注明出處


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM