構建者模式——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模式還是挺簡單的,程式碼就不上傳了,來張美圖,休息一下!