Android設計模式之Builder

來源:互聯網
上載者:User

 

應用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模式去實現一個類的成員函數。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.