建造者模式
- 將一個復(fù)雜對象的構(gòu)建與表示分離開來,使用多個簡單的對象一步一步構(gòu)建成一個復(fù)雜的對象,它提供了一種創(chuàng)建對象的最佳方式
- 用于構(gòu)建多樣化的對象,替代對象的構(gòu)建函數(shù),更加自由化
定義對象
/**
* 產(chǎn)品對象
*
* @author Mr.lim
*/
public class ProductInfo {
// 產(chǎn)品名稱
private String name;
// 產(chǎn)品期限
private String term;
// 開發(fā)團隊
private String team;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getTerm() {
return term;
}
public void setTerm(String term) {
this.term = term;
}
public String getTeam() {
return team;
}
public void setTeam(String team) {
this.team = team;
}
@Override
public String toString() {
return "ProductInfo{" +
"name='" + name + '\'' +
", term='" + term + '\'' +
", team='" + team + '\'' +
'}';
}
}
定義功能接口
public interface ProductInfoBuilder {
void builderProductInfoName();
void builderProductInfoTerm();
void builderProductInfoTeam();
ProductInfo startProduct();
}
定義功能接口實現(xiàn),這里可以根據(jù)需求,實現(xiàn)不能的功能
public class ProductInfoBuilderImpl implements ProductInfoBuilder {
private ProductInfo productInfo;
public ProductInfoBuilderImpl () {
System.out.println("Builder");
productInfo = new ProductInfo();
}
@Override
public void builderProductInfoName() {
System.out.println("設(shè)定項目名稱相關(guān)邏輯");
productInfo.setName("項目名稱");
}
@Override
public void builderProductInfoTerm() {
System.out.println("設(shè)定項目周期相關(guān)邏輯");
productInfo.setTerm("項目周期");
}
@Override
public void builderProductInfoTeam() {
System.out.println("設(shè)定項目開發(fā)團隊相關(guān)邏輯");
productInfo.setTeam("項目開發(fā)團隊");
}
@Override
public ProductInfo startProduct() {
return productInfo;
}
}
導(dǎo)演:管理建造出來的實例的依賴關(guān)系
/**
*
* @author Mr.lim
*/
public class Director {
public ProductInfo startProductDirector(ProductInfoBuilder productInfoBuilder) {
productInfoBuilder.builderProductInfoName();
productInfoBuilder.builderProductInfoTerm();
productInfoBuilder.builderProductInfoTeam();
return productInfoBuilder.startProduct();
}
public static void main(String[] args) {
Director director = new Director();
ProductInfo productInfo = director.startProductDirector(new ProductInfoBuilderImpl());
System.out.println(productInfo.toString());
}
}
輸出的結(jié)果:
Builder
設(shè)定項目名稱相關(guān)邏輯
設(shè)定項目周期相關(guān)邏輯
設(shè)定項目開發(fā)團隊相關(guān)邏輯
ProductInfo{name='項目名稱', term='項目周期', team='項目開發(fā)團隊'}