成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

解密 Android 開發中的"積木搭建術":建造者模式

移動開發 Android
掌握建造者模式的核心思想,就像獲得了一把萬能扳手,無論是處理傳統Java代碼還是擁抱現代Kotlin特性,都能讓你在Android開發的裝備庫中多一件趁手利器。

在 Android 開發的世界里,你是否遇到過這樣的場景:要創建一個需要十多個參數的復雜對象,結果代碼變成了一長串讓人眼花繚亂的構造函數?這時候,建造者模式就像一套精密的樂高積木工具包,能幫你優雅地解決這個難題。

想象你要組裝一臺定制電腦

? 1.先選CPU

? 2.再加內存條

? 3.挑顯卡

? 4.配硬盤

? ...

如果要求客戶一次性提供所有配件參數,這體驗得多糟糕?建造者模式正是通過分步配置的方式,讓對象構建變得像搭積木一樣簡單。

實戰三部曲:使用·解析·自定義建造者模式

官方組件實戰手冊

場景案例:對話框構建藝術

// 分步構建多功能對話框
AlertDialog dataDialog=new AlertDialog.Builder(this)
        .setTitle("數據采集")  
        .setView(R.layout.custom_data_form) 
        .setCancelable(false) 
        .setPositiveButton("提交", (d, w) -> {
            // 獲取表單數據
            EditText etName= dataDialog.findViewById(R.id.et_name);
            submitData(etName.getText().toString());
        })
        .setNegativeButton("清空", (d, w) -> {
            // 清空輸入框
            clearFormFields();
        })
        .setNeutralButton("說明", (d, w) -> {
            // 彈出幫助信息
            showHelpDialog();
        })
        .create(); // 最終組裝

dataDialog.getWindow().setSoftInputMode( 
    WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);

這種鏈式調用的優勢顯而易見:

? 每個設置項都像在積木盒里挑選零件

? 配置順序自由調整

? 省略不關心的配置項

? 代碼可讀性提升50%以上

源碼解析:拆解建造者引擎

AlertDialog.Builder核心實現揭秘,看看積木盒的機械結構:

public class AlertDialog extends Dialog {
    // 配置參數容器
    private AlertController mAlert;

    public static class Builder {
        // 存儲所有配置參數
        private final AlertController.AlertParams mParams;

        public Builder(Context context) {
            mParams = new AlertController.AlertParams(context);
        }

        public Builder setTitle(CharSequence title) {
            mParams.mTitle = title;
            returnthis;
        }

        public AlertDialog create() {
            final AlertDialog dialog =new AlertDialog(mParams.mContext);
            // 將配置參數應用到對話框
            mParams.apply(dialog.mAlert);
            return dialog;
        }
    }
}

// 參數應用關鍵邏輯
class AlertController {
    void apply(AlertParams params) {
        if (params.mTitle != null) {
            mTitleView.setText(params.mTitle);
        }
        // 其他參數應用邏輯...
    }
}

設計亮點解析:

?參數容器模式:AlertParams集中管理所有配置項

?延遲加載機制:直到create()時才真正創建對話框

?職責分離:Builder負責收集參數,Dialog負責展示邏輯

手把手打造自定義建造者

需求:創建可定制的圖片加載器

public class ImageLoaderBuilder {

    private Context context;
    private String url;
    private int placeholder= R.drawable.ic_loading;
    private int errorImage= R.drawable.ic_error;
    private boolean cacheInMemory = true;
    private ImageView targetView;

    public ImageLoaderBuilder(Context ctx) {
        this.context = ctx.getApplicationContext();
    }

    public ImageLoaderBuilder load(String imageUrl) {
        this.url = imageUrl;
        returnthis;
    }

    public ImageLoaderBuilder placeholder(int resId) {
        this.placeholder = resId;
        returnthis;
    }

    public ImageLoaderBuilder error(int resId) {
        this.errorImage = resId;
        returnthis;
    }

    public ImageLoaderBuilder disableMemoryCache() {
        this.cacheInMemory = false;
        returnthis;
    }

    public void into(ImageView imageView) {
        this.targetView = imageView;
        executeLoad();
    }

    private void executeLoad() {
        // 實際加載邏輯
        Glide.with(context)
            .load(url)
            .placeholder(placeholder)
            .error(errorImage)
            .skipMemoryCache(!cacheInMemory)
            .into(targetView);
    }
}

// 使用示例:構建高級圖片加載
new ImageLoaderBuilder(getContext())
    .load("https://files.mdnice.com/user/31508/d33310a6-bb17-496b-ad44-da673a6bcce4.jpg")
    .placeholder(R.drawable.placeholder_gradient)
    .error(R.drawable.error_retry)
    .disableMemoryCache()
    .into(imageView);

避坑指南:建造者模式的正確打開方式

內存管理:避免直接持有Activity Context,及時清理完成構建的Builder實例,弱引用防止內存泄漏

private WeakReference<ImageView> viewRef;

public void into(ImageView imageView) {
    this.viewRef = new WeakReference<>(imageView);
    executeLoad();
}

參數校驗:在executeLoad()前校驗URL有效性

private void validateConfig() {
    if (TextUtils.isEmpty(url)) {
        throw new IllegalStateException("必須設置圖片URL");
    }
    if (targetView == null) {
        throw new IllegalStateException("必須指定目標ImageView");
    }
}

靈活擴展:支持不同圖片加載引擎

public ImageLoaderBuilder setEngine(LoadEngine engine) {
    this.engineType = engine;
    returnthis;
}

privatevoidexecuteLoad() {
    switch (engineType) {
        case GLIDE:
            loadWithGlide();
            break;
        case PICASSO:
            loadWithPicasso();
            break;
    }
}

最佳實踐建議:當你的對象需要滿足以下任意兩個條件時,就該考慮建造者模式了

? 參數數量超過5個

? 存在大量可選參數

? 需要支持多種配置組合

? 參數之間存在依賴關系

擴展思考:現代開發中的新模式

隨著Kotlin的普及,DSL(領域特定語言)正在部分取代傳統建造者模式:

// 使用DSL風格創建對話框
createDialog {
    title = "系統提示"
    message = "確認清除緩存?"
    positiveButton("確定") {
        clearCache()
    }
    negativeButton("取消")
    cancelOnTouchOutside(false)
}

但傳統建造者模式依然在以下場景保持優勢:

? Java項目開發

? 需要嚴格參數校驗的場合

? 與舊代碼庫的兼容需求

掌握建造者模式的核心思想,就像獲得了一把萬能扳手,無論是處理傳統Java代碼還是擁抱現代Kotlin特性,都能讓你在Android開發的裝備庫中多一件趁手利器。

責任編輯:武曉燕 來源: 沐雨花飛碟
相關推薦

2021-04-14 09:02:22

模式 設計建造者

2011-07-14 14:46:46

設計模式

2021-10-26 00:21:19

設計模式建造者

2020-10-20 13:33:00

建造者模式

2024-02-19 08:38:34

建造者模式Android設計模式

2021-01-21 05:34:14

設計模式建造者

2021-06-10 19:09:05

模式代碼建造者

2021-05-11 08:54:59

建造者模式設計

2021-07-28 10:02:54

建造者模式代碼

2022-11-01 15:25:01

構建者模式Go 語言

2013-03-25 17:35:23

jimu傻瓜式App制作

2018-07-30 11:56:17

解密加密開發

2022-10-09 08:48:13

配置化建造者參數

2013-11-26 17:09:57

Android設計模式

2010-11-04 09:57:38

In App PurcAndroid 2.3Android

2012-02-28 10:33:27

Eclipse 3.7Android環境

2012-04-11 09:26:13

內核Linux 開發

2013-07-23 06:11:44

Android開發學習Android開發環境Java

2023-06-08 13:10:04

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日本国产一区二区 | 天天干成人网 | 久久99精品久久久久久国产越南 | 成人综合一区 | 波多野结衣在线观看一区二区三区 | 国产亚洲精品久久久优势 | 日韩精品视频在线观看一区二区三区 | 精品真实国产乱文在线 | 国产毛片毛片 | 91在线网 | 激情视频中文字幕 | 真人女人一级毛片免费播放 | 日本视频在线播放 | 精品综合 | 日韩精品久久一区二区三区 | chengrenzaixian| 天天综合国产 | 国产日韩欧美一区 | 国产成人网| 香蕉久久a毛片 | 亚洲国产aⅴ精品一区二区 免费观看av | 国产在线a | 免费黄视频网站 | 国产黄色在线观看 | 欧美日韩精品久久久免费观看 | 亚洲精品欧美一区二区三区 | 精品视频一区二区三区在线观看 | 久久久噜噜噜久久中文字幕色伊伊 | 亚洲导航深夜福利涩涩屋 | 国产一区久久精品 | 天天摸天天干 | 亚洲精品第一页 | 日韩中文久久 | 亚洲免费视频一区 | 国产精品毛片无码 | 国产在线a| www.日日夜夜| 国产精品永久久久久久久www | 天天草狠狠干 | 精品久久一| 久久在视频 |