應用1:
1. 代碼:
在BroswerActivity.java中,有對WebViewClient的建立,代碼如下:
private final WebViewClient mWebViewClient = new WebViewClient() {
……
/**
* Displays SSL error(s) dialog to the user.
*/
@Override
public void onReceivedSslError(
final WebView view, final SslErrorHandler handler, final SslError error) {
……
new AlertDialog.Builder(BrowserActivity.this)
.setTitle(R.string.security_warning)
.setIcon(android.R.drawable.ic_dialog_alert)
.setView(warningsView)
.setPositiveButton(R.string.ssl_continue,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
handler.proceed();
}
})
.setNeutralButton(R.string.view_certificate,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
showSSLCertificateOnError(view, handler, error);
}
})
.setNegativeButton(R.string.cancel,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
handler.cancel();
BrowserActivity.this.resetTitleAndRevertLockIcon();
}
})
.setOnCancelListener(
new DialogInterface.OnCancelListener() {
public void onCancel(DialogInterface dialog) {
handler.cancel();
BrowserActivity.this.resetTitleAndRevertLockIcon();
}
})
.show();
……
2. 分析:
(1)功能:正如注釋中所示,建立一個error dialog並顯示
(2)模式說明: 這裡,使用了簡化的builder模式,將抽象建造者省略,只使用一個具體建造者,並且將指導者角色也省略了。 AlertDialog.Builder就是具體建造者,另外,它是以匿名類的方式被建立的,而且,Builder類是AlertDialog的內部類,這樣,耦合性比較低,這正是物件導向中要達到的設計意圖之一。 最後調用show函數,它的傳回型別正是我們要建立的產品,即AlertDialog。 所以,Builder(具體建造者)是AlertDialog(產品)的內部匿名類,用來建立並顯示一個dialog。
(3)啟示: 我們完全可以對builder模式進行簡化,將抽象建造者甚至指導者角色省略。 具體建立者和產品之間可以用內部類來實現,以達到低耦合的目的。
應用2:StringBuilder,StringBuffer
1. 代碼:
public class DefaultHttpClientConnection extends SocketHttpClientConnection {
……
public String toString() {
StringBuffer buffer = new StringBuffer();
buffer.append("[");
if (isOpen()) {
buffer.append(getRemotePort());
} else {
buffer.append("closed");
}
buffer.append("]");
return buffer.toString();
}
}
2.分析:
(1)功能:StringBuffer和StringBuilder是包含在java.lang包中的,在android中的實現和標準java2的實現不一樣,如下:
(2)模式說明:
• 這裡,使用了簡化的builder模式,將指導者角色省略。
• builder模式被用於實現DefaultHttpClientConnection的成員函數toString。
• 最後的return buffer.toString()其實返回的就是產品String。
(3)啟示:
• 完全可以用builder模式去實現一個類的成員函數。