- Builder模式的定義是用于構(gòu)建復(fù)雜對象的一種模式,所構(gòu)建的對象往往需要多步初始化或賦值才能完成麸澜。那么挺尿,在實際的開發(fā)過程中,我們哪些地方適合用到Builder模式呢炊邦?其中使用Builder模式來替代多參數(shù)構(gòu)造函數(shù)是一個比較好的實踐法則编矾。
我們有時候會寫這樣的實現(xiàn)類】
Student();
Student(String name)馁害;
Student(String name窄俏,int age);
Student(String name蜗细,int age裆操,String address)怒详;
Student(String name,int age,String address,String ID)炉媒;
使用場景
- 為了滿足不同的需求有時候必須要這樣,把所有的構(gòu)造函數(shù)都聲明昆烁。這樣書寫很常見并且也比較有效率但是也存在很多不足吊骤,比如類的作者必須好把所有的構(gòu)造函數(shù)都寫上,而且在實例化的時候也要寫默認(rèn)值静尼。比如new Student(“張三”,-1,"北京")白粉;年齡為-1肯定不符合常理,但是在實例化一個對象的時候必須要這種默認(rèn)值鼠渺,這是規(guī)范的要求否則直接報錯了鸭巴。如果沒有使用setAge(int age)方法修改age的值,對于代碼的后期維護(hù)和協(xié)同開發(fā)同伴使用肯定會是一件很痛苦的事情拦盹,因為根本不知道-1的含義是什么鹃祖。這時候使用Builder模式就很有必要了。Builder模式就是使用一個代理完成對象的構(gòu)建過程普舆。這樣的好處是易于擴(kuò)展和類的使用恬口,但同時失去了一些效率校读。
image.png
image.png
最后客戶程序可以很靈活比如Student student = new Builder().setAddress("南昌").setAge(90).setID("007").build();
這樣就可以調(diào)用 student.getName()和getAge()等方法了。這樣寫會喪失一定的效率但是代碼易于擴(kuò)展和使用祖能。如果對student類進(jìn)行了修改加入了新的成員變量歉秫,那么只需簡單修改幾行代碼。如果不這樣寫構(gòu)造函數(shù)可能要添加很多嘍养铸!因為構(gòu)造函數(shù)參數(shù)個數(shù)和組合有很多種雁芙。。
}