最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

深入理解Android中的建造者模式

 更新時間:2016年09月30日 09:49:16   投稿:daisy  
建造者模式將一個復雜的構建與其表示相分離,使得同樣的構建過程可以創(chuàng)建不同的表示。所以這篇文章主要介紹了Android中的建造者模式,有需要的朋友們可以參考借鑒。

前言

在Android開發(fā)過程中,我發(fā)現(xiàn)很多安卓源代碼里應用了設計模式,比較常用的有適配器模式(各種adapter),建造者模式(Alert Dialog的構建)等等。雖然我們對大多數(shù)設計模式都有所了解,但是在應用設計模式的這個方面,感覺很多人在這方面有所不足。所以這篇文章我們一起深入的理解Android中的建造者模式。

建造者模式(Builder Pattern)也叫生成器模式,其定義如下:

separate the construction of a complex object from its representation so that the same construction process can create different representations.將一個復雜對象的構建與它的標示分離,這樣的話就可以使同樣的構建過程可以創(chuàng)建不同的表示。

我的理解:就是把一個產(chǎn)品(對象)表示(展示)和構建(創(chuàng)建)過程分離開來,這樣產(chǎn)品的構建流程相同卻可以有不同的產(chǎn)品表示。

應用場景

這里舉出Android中常見的例子:

android中的AlertDialog對話框的構建過程就是建造者模式的典型應用。


看一下Builder源碼

 public static class Builder {
  private final AlertController.AlertParams P;

  public Builder(Context context) {
    this(context, resolveDialogTheme(context, 0));
  }


  public Builder(Context context, int themeResId) {
    P = new AlertController.AlertParams(new ContextThemeWrapper(
        context, resolveDialogTheme(context, themeResId)));
  }

  //各種set參數(shù)方法
  setTitle()
  ...
  ...
  ...

  /**
   * Creates an {@link AlertDialog} with the arguments supplied to this
   * builder.
   * <p>
   * Calling this method does not display the dialog. If no additional
   * processing is needed, {@link #show()} may be called instead to both
   * create and display the dialog.
   */
  public AlertDialog create() {
    // Context has already been wrapped with the appropriate theme.
    final AlertDialog dialog = new AlertDialog(P.mContext, 0, false);
    P.apply(dialog.mAlert);
    dialog.setCancelable(P.mCancelable);
    if (P.mCancelable) {
      dialog.setCanceledOnTouchOutside(true);
    }
    dialog.setOnCancelListener(P.mOnCancelListener);
    dialog.setOnDismissListener(P.mOnDismissListener);
    if (P.mOnKeyListener != null) {
      dialog.setOnKeyListener(P.mOnKeyListener);
    }
    return dialog;
  }


  // 這個show方法是builder對象的,里面封裝了create()和show()可以直接調取創(chuàng)建并顯示對話框
  public AlertDialog show() {
    final AlertDialog dialog = create();
    dialog.show();
    return dialog;
  }
}

分析源碼可以看到內部類Builder是用來構建這個對話框的:

    1、創(chuàng)建builder的時候,會把這個AlertController.AlertParams P;對象P創(chuàng)建new出來

    2、在對bilder設置各種參數(shù)的時,這些參數(shù)都存在了對象P中

    3、然后builder參數(shù)設置完畢后在調用create方法。

final AlertDialog dialog = new AlertDialog(P.mContext, 0, false);
P.apply(dialog.mAlert); // mAlert是外部類中的

這個方法中會首先調用外部類AlertDialog的構造方法,new出一個外部類對象,然后p.apply()方法會將P這個對象作為內部類的屬性賦值給AlertController的對象mAlert。這樣就完成了一次的構建。

下面是AlertDialog的部分源碼

public class AlertDialog extends Dialog implements DialogInterface {
  // 這個對象用來承接builder內部所設置的參數(shù)
  private AlertController mAlert;

  //以下幾個構造方法決定只能通過內部類builder來構建
  protected AlertDialog(Context context) {
    this(context, 0);
  }

  protected AlertDialog(Context context, boolean cancelable,   OnCancelListener cancelListener) {
    this(context, 0);
    setCancelable(cancelable);
    setOnCancelListener(cancelListener);
  }


  protected AlertDialog(Context context, @StyleRes int themeResId) {
    this(context, themeResId, true);
  }

  AlertDialog(Context context, @StyleRes int themeResId, boolean createContextThemeWrapper) {
    super(context, createContextThemeWrapper ? resolveDialogTheme(context, themeResId) : 0,
      createContextThemeWrapper);

    mWindow.alwaysReadCloseOnTouchAttr();
    mAlert = new AlertController(getContext(), this, getWindow());
    }
}

總結

以上就是這篇文章的全部內容了,希望本文的內容對各位Android開發(fā)者們能有所幫助,如果有疑問大家可以留言交流。

相關文章

  • Android 出現(xiàn)問題 Gradle

    Android 出現(xiàn)問題 Gradle

    這篇文章主要介紹了Android 出現(xiàn)問題 Gradle "xxx" project refresh failed解決辦法的相關資料,需要的朋友可以參考下
    2017-04-04
  • FFmpeg Principle學習open_output_file打開輸出文件

    FFmpeg Principle學習open_output_file打開輸出文件

    這篇文章主要為大家介紹了FFmpeg Principle學習open_output_file打開輸出文件示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • Android中的Bitmap的詳細介紹

    Android中的Bitmap的詳細介紹

    本篇文章主要介紹了Android中的Bitmap,是Windows標準格式圖形文件,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • Android中AndroidStudio&Kotlin安裝到運行過程及常見問題匯總

    Android中AndroidStudio&Kotlin安裝到運行過程及常見問題匯總

    這篇文章主要介紹了Android(AndroidStudio&Kotlin)安裝到運行過程及常見問題匯總,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒借鑒價值,需要的朋友可以參考下
    2020-03-03
  • Android自定義View制作動態(tài)炫酷按鈕實例解析

    Android自定義View制作動態(tài)炫酷按鈕實例解析

    這篇文章主要為大家詳細解析了Android自定義View制作動態(tài)炫酷按鈕實例,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-07-07
  • Android編程實現(xiàn)對話框Dialog背景透明功能示例

    Android編程實現(xiàn)對話框Dialog背景透明功能示例

    這篇文章主要介紹了Android編程實現(xiàn)對話框Dialog背景透明功能,涉及Android對話框的布局、屬性及事件處理相關操作技巧,需要的朋友可以參考下
    2017-07-07
  • Android自定義跑馬燈文字效果

    Android自定義跑馬燈文字效果

    這篇文章主要為大家詳細介紹了Android自定義跑馬燈文字效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • Android Fragment的生命周期詳解

    Android Fragment的生命周期詳解

    本文主要講解Android Fragments的生命周期,這里整理了相關資料及對Fragment 的創(chuàng)建,有需要的小伙伴看下
    2016-09-09
  • Android獲取當前位置的經(jīng)緯度數(shù)據(jù)

    Android獲取當前位置的經(jīng)緯度數(shù)據(jù)

    這篇文章主要介紹了Android獲取當前位置的經(jīng)緯度數(shù)據(jù)的相關資料,需要的朋友可以參考下
    2016-02-02
  • Android播放多張圖片形成的一個動畫示例

    Android播放多張圖片形成的一個動畫示例

    這篇文章主要介紹了Android播放多張圖片形成的一個動畫實現(xiàn)方法,結合實例形式分析了Android逐幀播放動畫圖片及ImageView控件的相關使用技巧,需要的朋友可以參考下
    2016-10-10

最新評論

凌云县| 当雄县| 广昌县| 长岭县| 祁东县| 册亨县| 夏津县| 珠海市| 靖远县| 济宁市| 祁东县| 惠来县| 龙门县| 沧源| 湘西| 庄浪县| 龙里县| 西林县| 柘城县| 金门县| 屏南县| 苏尼特左旗| 凤山县| 平阴县| 黎城县| 武山县| 泸溪县| 凤凰县| 铜陵市| 若羌县| 昌宁县| 芦溪县| 平遥县| 敦煌市| 德清县| 准格尔旗| 仲巴县| 眉山市| 乌拉特后旗| 兴安县| 江阴市|