23種設(shè)計模式之建造者模式

優(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

已完成測試资铡!有不對的地方歡迎指出,感恩幢码。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末笤休,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子症副,更是在濱河造成了極大的恐慌店雅,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,464評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件贞铣,死亡現(xiàn)場離奇詭異闹啦,居然都是意外死亡,警方通過查閱死者的電腦和手機辕坝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,033評論 3 399
  • 文/潘曉璐 我一進店門窍奋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人酱畅,你說我怎么就攤上這事琳袄。” “怎么了纺酸?”我有些...
    開封第一講書人閱讀 169,078評論 0 362
  • 文/不壞的土叔 我叫張陵窖逗,是天一觀的道長。 經(jīng)常有香客問我餐蔬,道長碎紊,這世上最難降的妖魔是什么佑附? 我笑而不...
    開封第一講書人閱讀 59,979評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮仗考,結(jié)果婚禮上音同,老公的妹妹穿的比我還像新娘。我一直安慰自己痴鳄,他們只是感情好瘟斜,可當我...
    茶點故事閱讀 69,001評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著痪寻,像睡著了一般螺句。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上橡类,一...
    開封第一講書人閱讀 52,584評論 1 312
  • 那天蛇尚,我揣著相機與錄音,去河邊找鬼顾画。 笑死取劫,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的研侣。 我是一名探鬼主播谱邪,決...
    沈念sama閱讀 41,085評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼庶诡!你這毒婦竟也來了惦银?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,023評論 0 277
  • 序言:老撾萬榮一對情侶失蹤末誓,失蹤者是張志新(化名)和其女友劉穎扯俱,沒想到半個月后盲镶,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體棍弄,經(jīng)...
    沈念sama閱讀 46,555評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡兔院,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,626評論 3 342
  • 正文 我和宋清朗相戀三年杜秸,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片憔维。...
    茶點故事閱讀 40,769評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡微姊,死狀恐怖航攒,靈堂內(nèi)的尸體忽然破棺而出呕屎,到底是詐尸還是另有隱情宪萄,我是刑警寧澤,帶...
    沈念sama閱讀 36,439評論 5 351
  • 正文 年R本政府宣布榨惰,位于F島的核電站,受9級特大地震影響静汤,放射性物質(zhì)發(fā)生泄漏琅催。R本人自食惡果不足惜居凶,卻給世界環(huán)境...
    茶點故事閱讀 42,115評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望藤抡。 院中可真熱鬧侠碧,春花似錦、人聲如沸缠黍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,601評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽瓷式。三九已至替饿,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間贸典,已是汗流浹背视卢。 一陣腳步聲響...
    開封第一講書人閱讀 33,702評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留廊驼,地道東北人据过。 一個月前我還...
    沈念sama閱讀 49,191評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像妒挎,于是被迫代替她去往敵國和親绳锅。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,781評論 2 361

推薦閱讀更多精彩內(nèi)容