> 文档中心 > Android设计模式:Builder创建者模式在Android中的应用,Dialog,StringBuilder

Android设计模式:Builder创建者模式在Android中的应用,Dialog,StringBuilder

    根据需要,进行创建。-----箴言-----

内容简介:

在实际使用创建者模式进行对象的创建时,经常利用“内部类”来进行对象的创建,耦合性比较低。

从两代码来看创建者模式在Android的实际体现和运用。

例子1:Dialog的创建:

代码如下:

 

在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();                   ……}

 

分析与说明:

(1)功能:正如注释中所示,创建一个error dialog并显示

(2)模式说明: 这里,使用了简化的builder模式,将抽象建造者省略,只使用一个具体建造者,并且将指导者角色也省略了。 AlertDialog.Builder就是具体建造者,另外,它是以匿名类的方式被创建的,而且,Builder类是AlertDialog的内部类,这样,耦合性比较低,这正是面向对象中要达到的设计意图之一。 最后调用show函数,它的返回类型正是我们要创建的产品,即AlertDialog。 所以,Builder(具体建造者)是AlertDialog(产品)的内部匿名类,用来创建并显示一个dialog。

(3)启示: 我们完全可以对builder模式进行简化,将抽象建造者甚至指导者角色省略。 具体创建者和产品之间可以用内部类来实现,以达到低耦合的目的。

 

例子2:String对象的创建者模式的体现:StringBuilder,StringBuffer

示例代码:

 

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();}}

分析:
   (1)功能:StringBuffer和StringBuilder是包含在java.lang包中的。
   (2)模式说明:
• 这里,使用了简化的builder模式,将指导者角色省略。
• builder模式被用于实现DefaultHttpClientConnection的成员函数toString。
• 最后的return buffer.toString()其实返回的就是产品String。
   (3)启示:
• 完全可以用builder模式去实现一个类的成员函数。