優(yōu)點:不必知道內(nèi)部實現(xiàn)床嫌,解耦合,可擴展性高胸私。
缺點:如果產(chǎn)品的內(nèi)部變化復(fù)雜厌处,可能會導(dǎo)致需要定義很多具體建造者類來實現(xiàn)這種變化,導(dǎo)致系統(tǒng)變得很龐大岁疼。
使用場景:對某個對象構(gòu)造復(fù)雜的情況下使用阔涉。
主要分兩部分:
1.構(gòu)建者(Bulider)
2.組裝者(Director)
建造者缆娃,主要是構(gòu)建者和組裝者的分工解耦,比如我要建造一臺iphone手機瑰排,手機有很多的零部件贯要,比如主板、攝像頭椭住、電池崇渗、外殼等等各種小零件,這些東西構(gòu)建者(Bulider)負責把它們做出來京郑,而組裝者(Director)則負責把它們組裝起來宅广,形成一臺手機。
準備工作
創(chuàng)建手機各個部件的實體類些举,例子從簡跟狱,分外殼和主板。
外殼類(Shell):
/**
* 這是一個手機外殼類
*/
public class Shell {
private String name;
public Shell(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
主板類(Motherboard):
/**
* 這是一個手機主板類
*/
public class Motherboard {
private String name;
public Motherboard(String name){
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
手機類(Phone):
/**
* 這是一個手機類
*/
public class Phone {
private Motherboard motherboard;
private Shell shell;
public Motherboard getMotherboard() {
return motherboard;
}
public void setMotherboard(Motherboard motherboard) {
this.motherboard = motherboard;
}
public Shell getShell() {
return shell;
}
public void setShell(Shell shell) {
this.shell = shell;
}
}
步入主題
構(gòu)建者
創(chuàng)建一個構(gòu)建者接口(PhoneBulider)户魏,主要工作用于實現(xiàn)構(gòu)建主板和構(gòu)建外殼:
/**
* 這是一個構(gòu)建者接口
*/
public interface PhoneBulider {
Motherboard buliderMotherboard();
Shell buliderShell();
}
創(chuàng)建一個構(gòu)建者實現(xiàn)類(IphoneBulider):
/**
* 這是蘋果手機構(gòu)建實現(xiàn)類
*/
public class IphoneBulider implements PhoneBulider{
@Override
public Motherboard buliderMotherboard() {
Log.d("TAG","構(gòu)建蘋果手機主板");
return new Motherboard("蘋果手機主板");
}
@Override
public Shell buliderShell() {
Log.d("TAG","構(gòu)建蘋果手機外殼");
return new Shell("蘋果手機外殼");
}
}
然后步入組裝驶臊。
組裝者
先創(chuàng)建一個組裝者接口(PhoneDirector):
/**
*這是一個組裝者接口
*/
public interface PhoneDirector {
Phone directorPhone();
}
再創(chuàng)建一個組裝者實現(xiàn)類:
/**
* 這是一個蘋果手機組裝實現(xiàn)類
*/
public class IphoneDirector implements PhoneDirector {
private PhoneBulider phoneBulider;
public IphoneDirector(PhoneBulider phoneBulider){
this.phoneBulider = phoneBulider;
}
@Override
public Phone directorPhone() {
//讓構(gòu)建者構(gòu)建好主板與外殼
Motherboard motherboard = phoneBulider.buliderMotherboard();
Shell shell = phoneBulider.buliderShell();
//構(gòu)建好之后進行組裝
Phone phone = new Phone();
phone.setMotherboard(motherboard);
phone.setShell(shell);
return phone;
}
}
構(gòu)建者和組裝者都寫完了,最后調(diào)用試試绪抛。
/**
* 這是調(diào)用者
*/
public class MainActivity extends FragmentActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
PhoneDirector phoneDirector = new IphoneDirector(new IphoneBulider());
Phone phone = phoneDirector.directorPhone();
Log.d("TAG", "組裝好的Phone = " + phone + "\nMotherboard = " + phone.getMotherboard().getName() + "\nshell = " + phone.getShell().getName());
}
}
image.png
已完成測試资铡!有不對的地方歡迎指出,感恩幢码。