Android設計模式之Builder模式

2021-08-19 02:26:00 字數 3995 閱讀 2898

設計模式是我們在平時程式設計的過程中對一些常見的問題場景總結出來的最優程式設計套路,按照設計模式的思想,我們在程式設計的過程中遇到類似的問題時可以快速的套用對應的設計模式,從而高效的解決問題。在平時的開發過程中,我們也經常接觸到各種設計模式,甚至我們自己寫的**也會不自覺的使用到設計模式,只是可能叫不出名字而已。下來介紹一種android中常用的設計模式,builder模式。

將乙個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的展示。

build模式主要的作用是將複雜物件的構建單獨剝離出來,通過builder模式可以減少構造器或者方法呼叫傳入的引數個數,使複雜物件的構建變得清晰,這對有很多配置引數進行初始化的物件尤其適用。

下面我們定義乙個person類,結構如下:

public class person

為了構造person物件,我們提供了以下建構函式

public person() 

public person(string name)

public person(string name, int age)

public person(string name, int age, double weight)

public person(string name, int age, double weight, double height)

或者提供一系列的set方法

public void setname(string name) 

public void setage(int age)

public void setweight(double weight)

public void setheight(double height)

現在我們有兩種方式去構造物件並且設定引數,一種是直接呼叫建構函式將引數傳入,一種是呼叫set方法設定引數,或者兩種混合使用,如下:

person person = new person("張三");

person person1 = new person("李四", 18);

person person2 = new person("王五", 20, 100);

person person3 = new person("劉六", 25, 120, 180);

person person4 = new person();

person4.setname("鄧七");

person4.setage(23);

person4.setweight(130);

person4.setheight(175);

先說說使用建構函式的方式,使用建構函式的方式不僅新增了很多建構函式,而且很難區分建構函式中每乙個引數的具體含義,我們必須找到對應的建構函式的實現才能明白每乙個引數的意義;再說使用set的方式,我們在使用set來設定物件的屬性之前,這個物件已經構建出來了,我們在**中是可以直接使用的,這樣就可能造成錯誤,也就是這個物件的構建和初始化時分離的,但其實,初始化和物件的構建應該繫結在一起,構建完成後立馬就應該初始化。

解決上面問題的辦法就是使用builder模式,**如下:

public class person 

public string getname()

public void setname(string name)

public int getage()

public void setage(int age)

public double getweight()

public void setweight(double weight)

public double getheight()

public void setheight(double height)

public static class builder

public builder setage(int age)

public builder setweight(double weight)

public builder setheight(double height)

public person build()

}}

構建物件:

person person = new person.builder().

setname("張三").

setage(17).

setweight(110).

setheight(180).

build();

構建模式專門建立了乙個靜態內部類來幫助物件的構建,先構建乙個靜態內部類的物件,然後通過鏈式呼叫的形式將引數設定給靜態內部類物件,設定完成後,呼叫靜態內部類的build方法去構建實際要構建的物件,通過這種方式,我們能夠在物件構建之前就將構建引數全部設定完畢,而且使用鏈式呼叫的方式,**結構清晰易懂。

四、android中使用builder模式的例項

在android系統和各大框架中,我們都不難看到builder模式的身影,下面列舉幾個:

1、alertdialg

alertdialog alertdialog = new alertdialog.builder(this).

settitle("標題").

seticon(r.mipmap.ic_launcher).

setview(r.layout.support_******_spinner_dropdown_item).

setpositivebutton("確定", new dialoginte***ce.onclicklistener()

}).setnegativebutton("取消", new dialoginte***ce.onclicklistener()

}).create();

alertdialog.show();

2、okhttp中的request物件構建

request.builder builder=new request.builder();

request request=builder.addheader("","")

.url("")

.post(body)

.build();

3、gson中gson物件的構建

gsonbuilder builder=new gsonbuilder();

gson gson=builder.setprettyprinting()

.disablehtmlescaping()

.generatenonexecutablejson()

.serializenulls()

.create();

1、builder模式是為了解決複雜物件的構建,將複雜物件的構建單獨剝離出來,可以減少構造構造器和引數,builder模式先設定構建引數,再構建物件的例項的,這樣能夠有效的避免物件沒有初始化的問題;

2、先定義乙個builder靜態內部類,屬性和外部類保持一致;

3、給builder類提供一系列的set方法設定屬性,返回builder類本身;

4、外部類提供乙個私有的構造方法,引數為builder物件,用builder物件的屬性給外部類屬性賦值;

5、builder類提供乙個build方法,build方法中利用外部類提供的私有構造方法構造外部類物件並返回,引數為builder類本身;

6、程式獲得外部類物件時,要先構建對應的builder類物件,然後呼叫builder類的一系列set方法設定屬性,最後呼叫build方法生成外部類物件。

android設計模式之抽象工廠模式

定義 抽象工廠模式定義為為建立一組相關或者相互依賴的物件提供乙個介面,而且無需指定他們的具體類。它是工廠方法模式的公升級版本。在有多個業務品種,業務分類時,通過抽象工廠模式產生需要的物件是一種非常好的解決方式。模式中包含的角色及其職責 1.抽象工廠 creator 角色 抽象工廠模式的核心,包含對多...

Android設計模式之(10) 命令模式

命令模式屬於行為模式。如你的上級領導指派給你的a,b,c三項任務。讓你做a,你就做a,讓你做b就做b。指哪打哪。外部的人對於你和你的領導來說,知道你的領導派發了abc任務給你,你也完成abc任務,任務具體是怎麼完成的外部的人並不需要關心。大學的新生入學都會進行軍訓,軍訓的專案有正步,齊步,軍姿等等 ...

Android設計模式之(14) 模板模式

模板模式屬於行為模式.簡單理解,某一套程式的流程是不改變的,但是具體的內容是可以更改的。例如公司的財務報表,需要進行申請,然後經理簽字以後才可以審批下來。流程 下屬財務資金審核提交 經理審核 經理簽字 審批完成 內容 有2個人去申請資金,他們執行的流程是一樣的,但是具體申請的資金以及經理審批後給予的...