建造者模式
建造者:創(chuàng)建和提供實例,導(dǎo)演:管理建造出來的實例的依賴關(guān)系。
我們想要買汽車 - 奧迪A6,去了4S店以后,我們發(fā)現(xiàn)這玩意根據(jù)不同的套餐價格也是不一樣的。車的大體沒有改變,但是內(nèi)部設(shè)置卻不同了。
奧迪A6 :
20萬 配置 沙發(fā)和空調(diào)
30萬 配置 空調(diào)和美女
40萬 配置 美女和電腦
/**
* Created by malei on 2016/12/5.
*/
public class HuaweiCompany {
private String ceo;
private String cto;
private String cao;
/*構(gòu)造方法中持有建造者對象
* 導(dǎo)演:管理建造出來的實例的依賴關(guān)系。*/
public HuaweiCompany(CompanyBuilder builder){
this.ceo = builder.ceo;
this.cto = builder.cto;
this.cao = builder.cao;
}
/*需要被構(gòu)建的對象只提供 getter 方法*/
public String getCeo(){
return ceo;
}
public String getCto() {
return cto;
}
public String getCao() {
return cao;
}
/*建造者作為靜態(tài)內(nèi)部類使用
* 建造者:創(chuàng)建和提供實例*/
public static class CompanyBuilder{
private String ceo;
private String cto;
private String cao;
/*按需為建造者提供不同的構(gòu)造方法*/
public CompanyBuilder(String ceo){
this.ceo = ceo;
}
public CompanyBuilder(){
}
/*返回被構(gòu)建的對象*/
public HuaweiCompany build(){
return new HuaweiCompany(this);
}
/*只提供 setter 方法*/
public CompanyBuilder setCeo(String ceo) {
this.ceo = ceo;
return this;
}
public CompanyBuilder setCto(String cto) {
this.cto = cto;
return this;
}
public CompanyBuilder setCao(String cao) {
this.cao = cao;
return this;
}
}
private void say() {
Log.show("ceo="+ceo + "\ncto="+cto+"\ncao="+cao);
}
public static void main(String[] args){
HuaweiCompany buidler = new CompanyBuilder()
.setCeo("馬磊")
.setCto("馬云")
.setCao("馬化騰").build();
buidler.say();
}
}