基本介紹:
建造者模式又叫生成器模式,是一種對象構(gòu)建模式。它可以將復(fù)雜對象的建造過程抽象出來(抽象類別),使這個抽象過程的不同實現(xiàn)方法可以構(gòu)造出不同表現(xiàn)(屬性)的對象建造者模式是一步一步建造一個復(fù)雜對象,它允許用戶只通過指定復(fù)雜對象的類型和內(nèi)容就可以建造他們,用戶不需要指定內(nèi)部的具體構(gòu)建細節(jié)
建造者模式四個角色:
Product(產(chǎn)品角色):一個具體的產(chǎn)品對象
Builder(抽象建造者):創(chuàng)建一個Product對象的各個部件指定的接口/抽象類
ConcreteBuilder(具體建造者):實現(xiàn)接口,構(gòu)建和裝配各個部件
Director(指揮者):構(gòu)建一個使用Builder的對象,它主要是用于創(chuàng)建一個復(fù)雜的對象,它主要有兩個作用,一是:隔離了客戶與對象的生產(chǎn)過程,二是:負責(zé)控制產(chǎn)品對象的生產(chǎn)過程
需求
我們有一款手機需要定制,需要經(jīng)過芯片制作,電池制作,外殼制作,組裝等,而且手機的廠商不是唯一一個,這個時候我們就需要用到建造者模式
首先我們需要一個產(chǎn)品手機
public class Phone {
/**
* 電池
*/
private String cell;
/**
* 芯片
*/
private String slug;
/**
* 手機殼
*/
private String phoneShell;
public String getCell() {
return cell;
}
public void setCell(String cell) {
this.cell = cell;
}
public String getSlug() {
return slug;
}
public void setSlug(String slug) {
this.slug = slug;
}
public String getPhoneShell() {
return phoneShell;
}
public void setPhoneShell(String phoneShell) {
this.phoneShell = phoneShell;
}
}
抽象的手機制作商
public abstract class PhoneBuilder {
protected Phone phone = new Phone();
/**
* 制造芯片
*/
public abstract void makeCell();
/**
* 制造電池
*/
public abstract void makeSlug();
/**
* 制造手機殼
*/
public abstract void makePhoneShell();
public Phone assemblePhone(){
return phone;
}
}
具體的手機制作商 比如華為,蘋果
/**
* 華為制造商
*/
public class HuaweiPhoneBuilder extends PhoneBuilder{
@Override
public void makeCell() {
System.out.println("制造麒麟9200芯片");
}
@Override
public void makeSlug() {
System.out.println("制造6000ma電池");
}
@Override
public void makePhoneShell() {
System.out.println("制造米亞白手機殼");
}
}
/**
* 蘋果制造商
*/
public class IPhoneBuilder extends PhoneBuilder{
@Override
public void makeCell() {
System.out.println("制造A17芯片");
}
@Override
public void makeSlug() {
System.out.println("制造蘋果電池");
}
@Override
public void makePhoneShell() {
System.out.println("制造蘋果手機殼");
}
}
然后我們需要一個指揮者,根據(jù)市場需求制作那款手機
public class PhoneDerector {
private PhoneBuilder phoneBuilder;
public PhoneDerector(PhoneBuilder phoneBuilder) {
this.phoneBuilder = phoneBuilder;
}
public void setHouseBuilder(PhoneBuilder phoneBuilder){
this.phoneBuilder=phoneBuilder;
}
public Phone createPhone(){
phoneBuilder.makeCell();
phoneBuilder.makeSlug();
phoneBuilder.makePhoneShell();
return phoneBuilder.assemblePhone();
}
}
然后我們就可以通過傳入不同的制作商獲取到不同的手機產(chǎn)品了
@Test
public void Builder(){
IPhoneBuilder iPhoneBuilder = new IPhoneBuilder();
HuaweiPhoneBuilder huaweiPhoneBuilder = new HuaweiPhoneBuilder();
Phone iphone= new PhoneDerector(iPhoneBuilder).createPhone();
Phone huawei = new PhoneDerector(huaweiPhoneBuilder).createPhone();
}

image.png