逸筆記-設(shè)計(jì)模式-創(chuàng)建型模式-建造者模式

基本介紹:

建造者模式又叫生成器模式,是一種對(duì)象構(gòu)建模式。它可以將復(fù)雜對(duì)象的建造過(guò)程抽象出來(lái)(抽象類(lèi)別),使這個(gè)抽象過(guò)程的不同實(shí)現(xiàn)方法可以構(gòu)造出不同表現(xiàn)(屬性)的對(duì)象建造者模式是一步一步建造一個(gè)復(fù)雜對(duì)象,它允許用戶只通過(guò)指定復(fù)雜對(duì)象的類(lèi)型和內(nèi)容就可以建造他們,用戶不需要指定內(nèi)部的具體構(gòu)建細(xì)節(jié)
建造者模式四個(gè)角色:
Product(產(chǎn)品角色):一個(gè)具體的產(chǎn)品對(duì)象
Builder(抽象建造者):創(chuàng)建一個(gè)Product對(duì)象的各個(gè)部件指定的接口/抽象類(lèi)
ConcreteBuilder(具體建造者):實(shí)現(xiàn)接口,構(gòu)建和裝配各個(gè)部件
Director(指揮者):構(gòu)建一個(gè)使用Builder的對(duì)象,它主要是用于創(chuàng)建一個(gè)復(fù)雜的對(duì)象,它主要有兩個(gè)作用,一是:隔離了客戶與對(duì)象的生產(chǎn)過(guò)程,二是:負(fù)責(zé)控制產(chǎn)品對(duì)象的生產(chǎn)過(guò)程

需求

我們有一款手機(jī)需要定制,需要經(jīng)過(guò)芯片制作,電池制作,外殼制作,組裝等,而且手機(jī)的廠商不是唯一一個(gè),這個(gè)時(shí)候我們就需要用到建造者模式
首先我們需要一個(gè)產(chǎn)品手機(jī)

public class Phone {
    /**
     * 電池
     */
    private String cell;

    /**
     * 芯片
     */
    private String slug;

    /**
     * 手機(jī)殼
     */
    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;
    }
}

抽象的手機(jī)制作商

public abstract class PhoneBuilder {

    protected Phone phone = new Phone();

    /**
     *  制造芯片
     */
    public abstract void makeCell();

    /**
     *  制造電池
     */
    public abstract void makeSlug();

    /**
     *  制造手機(jī)殼
     */
    public abstract void makePhoneShell();



    public Phone assemblePhone(){
        return phone;
    }
}

具體的手機(jī)制作商 比如華為,蘋(píng)果

/**
 *  華為制造商
 */
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("制造米亞白手機(jī)殼");
    }
}
/**
 *  蘋(píng)果制造商
 */
public class IPhoneBuilder extends PhoneBuilder{

    @Override
    public void makeCell() {
        System.out.println("制造A17芯片");
    }

    @Override
    public void makeSlug() {
        System.out.println("制造蘋(píng)果電池");

    }

    @Override
    public void makePhoneShell() {
        System.out.println("制造蘋(píng)果手機(jī)殼");
    }
}

然后我們需要一個(gè)指揮者,根據(jù)市場(chǎng)需求制作那款手機(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();
    }
}

然后我們就可以通過(guò)傳入不同的制作商獲取到不同的手機(jī)產(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
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容