1. 程式人生 > >android使用Java設計模式建造者模式(Builder模式)的寫法:

android使用Java設計模式建造者模式(Builder模式)的寫法:

建造者模式的定義

將一個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。
這裡給大家分析一下:
定義的前半句說,構造與表示分離,其實就是繼承(或實現)。
兩種工廠模式也都是為某個物件提供一個介面,而且無需指定它們的具體類。
所以建造者模式的重點是後半句:同樣的構建過程可以建立不同的結果。
但是我仔細想了一下,這句話說的也是太含糊了,並且和工廠模式也是類似的,工廠模式的介面也是定義了產品的過程,子類去實現,然後生產出不同的產品。
雖然是有點糾結但是還是應該先看完,在慢慢來深入理解這個建造者模式。

建造者模式中,有如下四種角色:

1.抽象建造者(Builder):該絕是用於規範產品的各個組成部分,並進行抽象,一般獨立於應用程式的邏輯。

2.具體建造者(Concrete Builder):該角色實現抽象建造者中定義的所有方法,並且返回一個元件好的產品例項。

3.產品(Product):該角色是建造者中的複雜物件,一個系統中會有多個產品類,這些產品類不一定有共同的介面,可以是完成不相關的。

4.導演者(Director):該角色負責安排已有模組的順序,然後告訴Builder開始建造

建造者模式的類圖:

這裡寫圖片描述

下面以自定義Dialog 為例

public class CursorDialog extends Dialog {


    public CursorDialog(@NonNull Context context) {
        super
(context); } public CursorDialog(@NonNull Context context, int themeResId) { super(context, themeResId); } }

需要在方法裡建立一個內部類

public class CursorDialog extends Dialog {


    private CursorDialog(@NonNull Context context) {
        super(context);
    }

    private CursorDialog
(@NonNull Context context, int themeResId) { super(context, themeResId); } //內部類 能在下面返回 上面的方法就私有化了 public static class Builder { private final Context mContext; //引數 在這寫一些Dialog的引數 不全屏 public Builder(Context context) { mContext = context; } public CursorDialog builder() { return new CursorDialog(mContext); } } }

最後成型:

public class CursorDialog extends Dialog {

    private CursorDialog(Context context) {
        super(context);
    }

    private CursorDialog(Context context, int themeResId) {
        super(context, themeResId);
    }







    public static class Builder {

        private final Context mContext;
        //引數
        //是否全屏 預設不全屏
        private boolean isFloating = true;//浮動 視窗化
        private String title;//flase
        private boolean isFull;
        private View layout;


//設定佈局
        public Builder setLayout(int res) {
            layout = View.inflate(mContext, res, null);
            return this;
        }

        public Builder setViewClick(int id, View.OnClickListener listener) {
            View view = layout.findViewById(id);
            view.setOnClickListener(listener);
            return this;
        }

        public Builder setViewClick(int id, AdapterView.OnItemClickListener listener) {
            View view = layout.findViewById(id);
            if (view instanceof AdapterView) {
                AdapterView v = (AdapterView) view;
                v.setOnItemClickListener(listener);
            }
            return this;
        }


        public Builder setView(View v) {
            layout = v;
            return this;
        }

        public Builder notFloating() {
            isFloating = false;
            return this;
        }

        public Builder setTitle(String title) {
            this.title = title;
            return this;
        }

        public Builder full() {
            isFull = true;
            isFloating = false;
            return this;
        }


        public Builder(Context context) {
            this.mContext = context;
        }


        public CursorDialog builder() {
            CursorDialog dialog;
            if (isFloating) {
                //浮動的
                if (TextUtils.isEmpty(title)) {
                    dialog = new CursorDialog(mContext, R.style.CursorDialogThemeNotTitle);
                } else {
                    dialog = new CursorDialog(mContext);
                }
            } 

            if (layout == null)
                throw new IllegalArgumentException("view不能為空");
            dialog.setContentView(layout);
            return dialog;
        }

    }
}

呼叫

Dialog  dialog = new CursorDialog.Builder(this).setLayout(R.layout.dialog_updata).notFloating().builder();

//此外需要自己寫對應的style

相關推薦

設計模式-建造Builder

sequence intern value 技術分享 模式 mar pen ear nds 2018-1-18 by Atlas 應用場景 需要采取循序漸進組合復雜對象時。 UML 用過elasticsearch java api的小夥伴,自然了解Bool

C#設計模式(5)——建造模式Builder Pattern

stringbu .... rtm summary 作用 生活 size 買電腦 如果 一、引言   在軟件系統中,有時需要創建一個復雜對象,並且這個復雜對象由其各部分子對象通過一定的步驟組合而成。例如一個采購系統中,如果需要采購員去采購一批電腦時,在這個實際需求中,電腦就

設計模式建造模式Builder Pattern

建造者模式(Builder Pattern)使用多個簡單的物件一步一步構建成一個複雜的物件。這種型別的設計模式屬於建立型模式,它提供了一種建立物件的最佳方式。 一個 Builder 類會一步一步構造最終的物件。該 Builder 類是獨立於其他物件的。 意圖:將一個複雜的構建與其表示相分離,

Java 設計模式——建造模式Builder Pattern

  前言 一、簡介 ​二、實現方式 三、常見第一種方式 (1)一般有以下幾個角色 (2)舉個例子 (3)具體步驟 (4)具體程式碼 三、第二種方式 (1)主要有三個角色:抽象建造者、具體建造者、產品 (2)舉個例子 (3)具體步驟

設計模式建造模式Builder Pattern

通過靜態內部類等方式實現的零件無序話構造 程式碼 1.User public class User { private String name; private int age; private String address; public String

設計模式建造模式Builder Pattern

建造者模式,又稱生成器模式:將一個複雜的構建與其表示相分離,使得同樣的構建過程可以建立不同的表示。 三個角色:建造者、具體的建造者、監工、使用者(嚴格來說不算) 建造者角色:定義生成例項所需要的所有方法; 具體的建造者角色:實現生成例項所需要的所有方法,並且定義獲取最終生成例項的方法; 監工

設計模式 ---建造模式Builder

建造者模式:將一個複雜物件的構建過程和表示過程分離。使得同樣的構建過程可以建立不同的表示。 它主要是用於一些複雜的物件,這些物件的內部構建間的構造順序通常是穩定的,但物件內部的構建同時面臨著複雜的變化。建造者模式提供了一個通用的介面,介面中定義了產品建立的過程

android使用Java設計模式建造模式Builder模式寫法

建造者模式的定義 將一個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。 這裡給大家分析一下: 定義的前半句說,構造與表示分離,其實就是繼承(或實現)。 兩種工廠模式也都是為某個物件提供一個介面,而且無需指定它們的具體類。

建造模式Builder Pattern- 最易懂的設計模式解析

前言 今天我來全面總結一下Android開發中最常用的設計模式 -建造者模式。 目錄 1. 介紹 1.1 定義 將一個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示 1.2 主要作用

建造模式-Builder Pattern 複雜物件的組裝與建立——建造模式遊戲角色設計建造模式解決方案

8.3 完整解決方案       Sunny公司開發人員決定使用建造者模式來實現遊戲角色的建立,其基本結構如圖8-3所示: 圖8-3 遊戲角色建立結構圖       在圖8-3中,Ac

java設計模式——建造模式Builder

相對於抽象工廠模式有了一定優勢,抽象工廠模式只能建立儲存單一類的例項,而建造者模式能儲存多個類的例項了。上程式碼,pass:前幾篇都用First、Second啥的,沒法混了,現在換成人了(*^__^*

C#設計模式-建造模式Builder Pattern

引言 在軟體測試中,一個專案的自動化測試包括UI自動化、API自動化、壓力自動化等,把這些不同型別的自動化測試組裝在一起變構成了一個專案的自動化測試。通過執行專案的自動化測試變能執行他的所有型別的自動化測試。當然,在生活中也有類似的,比如電腦,由CPU、磁碟、顯示卡等部分組成,一輛車由輪胎、車體、發動機等部件

轉載 Kotlin 設計模式-建造

struct href bank show model contain haskell num keyword 前言 Ktolin的可以使用DSL方式來創建對象,那麽對於設計模式來說,DSL方式創建對象就類似於Java 中使用Builder對象來創建,那麽來一段代碼看看DS

建造模式Builder Pattern

pub 圖片 imp 客戶端 問題 復雜 override 適合 type 定義: 將一個復雜對象的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示 解決的問題: 方便用戶創建復雜的對象(不需要知道實現過程) 代碼復用性 & 封裝性(將對象構建

用心理解設計模式——建造模式 (Builder Pattern)

前置文章: 用心理解設計模式——設計模式的原則  設計模式相關程式碼已統一放至 我的 Github   一、定義   建立型模式之一。   Separate the construction of a complex object

設計模式-建造模式(Builder)

建造者模式(Builder) 定義 : 將一個複雜物件的構建與它的表示分離, 是的同樣的構建過程可以建立不同的表示 使用者只需指定需要建造的型別就可以得到它們, 建造過程及細節不需要知道 型別 : 建立型設計模式 適用場景 一個物件有非常複雜

Java設計模式-建造(Builder)模式

最近在看Mybatis的原始碼, 在閱讀解析 XML 配置檔案的過程中, 發現使用到了建造者(Builder)模式。 因此, 打算重溫一下該設計模式。 由來 假設我們需要畫一個小人, 我們可能會有以下的建構函式定義: public Person(HeadType headType, HairType hair

設計模式-建造模式java程式碼案例

建造者模式 定義 將一個複雜物件的構建與表示分離,使得同樣的構建過程可以建立不同的表示。 結構 抽象建造者類(builder):為建立product物件而指定各個元件的抽象介面 具體建造類(concreteBuilder):實現builder介面,重寫方法構建不同的

建造模式Builder Pattern簡單&粗暴解析

1.前言 2.目錄 3.含義 一個例項有可能需要由很多不同部分組成,”建造者“ 就是把這些組成部分獨立出來 & 構建例項,使用者可以根據按需設定不同組成部分來獲取例項。 4.解決 1.複雜物件的建立。(物件與物件組成解耦) 5.原理

淺談Java設計模式——建造模式(Builder)

一、概述         將一個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。         建造者模式將複雜產品的構建過程封裝分解在不同的方法中,使得建立過程非常清晰,能夠讓我們更加精確的控制複雜產品物件的建立過程,同時它隔離了複雜產品物件的建立