1. 程式人生 > >構建者模式——Builder模式

構建者模式——Builder模式

只有你學會把自己已有的成績都歸零,才能騰出空間去接納更多的新東西,如此才能使自己不斷的超越自己。

現在我們將要學習一種新的模式——構建者模式,這種模式大家想必也遇到過,
比如Android中的AlertDialog.build()這樣就會創建出一個AlertDialog的物件例項來。那麼為什麼我們要用這種模式呢?因為我們建立的物件有可能很複雜,有大量的組成部分,但是我們想在建立的過程中對外隱藏一些細節,我們就可以用builder模式來建立了。

舉個例子,比如,我們的手機,有很多的型號,但是製造它的時候工作量是很大的,有軟體,硬體等各種複雜的東西在裡面,這時候我們就可以用構建模式來隱藏裡面的細節,而只是簡單的完成。

定義:
將一個複雜物件的構建與它的表示分離,使得同樣的構建過程可以讓不構建物件來構建。

現在我們就來寫一個構建模式出來!例子就舉上面的例子,製造一部手機:

來看一下我們的手機類:

public abstract class Phone {
    private String name;//品牌
    private String Os;//作業系統
    private String screen; //顯示螢幕

    public Phone(String name, String os, String screen) {
        this.name = name;
        Os = os;
        this
.screen = screen; } public Phone() { } public void setName() { System.out.println("名字已經設定"); } public abstract void setOs(); public void setScreen() { System.out.println("顯示器已經設定"); } @Override public String toString() { return "Phone{"
+ "name='" + name + '\'' + ", Os='" + Os + '\'' + ", screen='" + screen + '\'' + '}'; }

然後我們繼承我們的Phone來實現一個Android手機:

public class AndroidPhone extends Phone{

    @Override
    public void setOs() {
        System.out.println("作業系統為Andorid");
    }
}

好了,就如上面的過程,有設定名稱,系統和螢幕,那麼我們的Builder作為一個構建者,那麼也會有這麼多功能,好了,我們先來寫一下這個Builder抽象介面

public interface  BuilderInterface {
    public BuilderInterface  setName();
    public BuilderInterface  setOs();
    public BuilderInterface  setScreen();
}

然後我們來實現自己的buildler:

public class PhoneBuilder implements BuilderInterface{

    Phone phone = new AndroidPhone();

    public PhoneBuilder(Phone phone){
        this.phone = phone;
    }

    @Override
    public BuilderInterface  setName() {
        phone.setName();
        return  this;
    }

    @Override
    public BuilderInterface  setOs() {
        phone.setOs();
        return  this;
    }


    @Override
    public BuilderInterface  setScreen() {
        phone.setScreen();
        return this;
    }
}

有沒有注意到呢,我的set方法都返回了一個builder物件,其實現在大部分的builder都是這麼做的,建立後可以連續的設定出來,好了,我們的Builder物件也已經建立好了,那麼我們來看下主程式碼:

public class Main {

    public static void main(String[] args) {
        Phone phone = new AndroidPhone();
        PhoneBuilder phoneBuilder = new PhoneBuilder(phone);
        phoneBuilder.setScreen().setOs().setName();
    }
}

Ok,builder模式就寫好了,到這裡,你有沒有覺得這種模式和代理模式和像?是的,是很像,其真實模式之間都有很多的相似之處,都說學設計模式你不需要知道這是什麼設計模式,只要知道你寫出來的程式碼符合這種模式,這心中有劍的境界應該是最高境界了。

好了,builder模式還是挺簡單的,程式碼就不上傳了,來張美圖,休息一下!
休息一下