建造者模式是一個(gè)創(chuàng)建型模式伯铣,是將一個(gè)復(fù)雜的構(gòu)建過程拆分鸵熟,使得同樣的構(gòu)建過程創(chuàng)建不同的表示亮蒋。建造者模式適用于創(chuàng)建對(duì)象需要很多步驟扣典,一些基本部件不會(huì)變,而其組合經(jīng)常變化的時(shí)候慎玖。
建造者的鏈?zhǔn)綄懛?/h2>
編寫Course類:
@Data
public class Course {
private String name;
private String ppt;
private String video;
private String note;
}
編寫建造Course類:
public class CourseBuilder {
private Course course = null;
public CourseBuilder addName(String name){
course.setName(name);
return this;
}
public CourseBuilder addPpt(String ppt){
course.setPpt(ppt);
return this;
}
public CourseBuilder addVideo(String video){
course.setVideo(video);
return this;
}
public CourseBuilder addNote(String note){
course.setNote(note);
return this;
}
public CourseBuilder() {
this.course = new Course();
}
public Course build(){
return this.course;
}
}
調(diào)用測試:
public static void main(String[] args) {
Course course = new CourseBuilder()
.addName("a").addNote("note").addPpt("ppt").build();
System.out.println(course);
------------------------------------------------------------------------------------------
Course(name=a, ppt=ppt, video=null, note=note)
}
建造者的優(yōu)缺點(diǎn):
優(yōu)點(diǎn):
- 在建造者模式中贮尖, 客戶端不必知道產(chǎn)品內(nèi)部組成的細(xì)節(jié),將產(chǎn)品本身與產(chǎn)品的創(chuàng)建過程解耦趁怔,使得相同的創(chuàng)建過程可以創(chuàng)建不同的產(chǎn)品對(duì)象湿硝。
方便地替換具體建造者或增加新的具體建造者薪前, 用戶使用不同的具體建造者即可得到不同的產(chǎn)品對(duì)象 。 - 將復(fù)雜產(chǎn)品的創(chuàng)建步驟分解在不同的方法中关斜,使得創(chuàng)建過程更加清晰示括,也更方便使用程序來控制創(chuàng)建過程。
- 增加新的具體建造者無須修改原有類庫的代碼痢畜,指揮者類針對(duì)抽象建造者類編程垛膝,系統(tǒng)擴(kuò)展方便,符合“開閉原則”丁稀。
缺點(diǎn):
- 產(chǎn)生多余的builder 對(duì)象吼拥。
- 產(chǎn)品內(nèi)部改變,建造者也需要改變线衫。
應(yīng)用
在JDK的Stringbuilder中凿可,它提供append()方法為我們開放構(gòu)造步驟,最后調(diào)用toString()完成String的構(gòu)建過程授账。
public final class StringBuilder
extends AbstractStringBuilder
implements java.io.Serializable, CharSequence
{
public StringBuilder() {
super(16);
}
@Override
public StringBuilder append(CharSequence s) {
super.append(s);
return this;
}
···
}