建造者模式(Builder Pattern)
將 復(fù)雜對(duì)象的構(gòu)建與表示分離 開(kāi)來(lái)裙盾,使得同樣的構(gòu)建過(guò)程可以
創(chuàng)建不同的表示,缺點(diǎn)是可能產(chǎn)生多余的創(chuàng)建者與構(gòu)建過(guò)程對(duì)象,
消耗內(nèi)存,不適用于內(nèi)部建造順序不穩(wěn)定淹真,變化復(fù)雜的對(duì)象,
可能導(dǎo)致需要?jiǎng)?chuàng)建很多具體的建造者來(lái)實(shí)現(xiàn)這些變化核蘸。
例子:玩游戲創(chuàng)建角色時(shí)的自定義,不同的搭配生成不同的角色啸驯。
Product : 產(chǎn)品抽象類
Builder : 抽象Builder類客扎,規(guī)范產(chǎn)品組建徙鱼,一般是由子類實(shí)現(xiàn)具體的組建過(guò)程
ConcreteBuilder : 具體的Builder類
Director :統(tǒng)一組裝過(guò)程
示例代碼:
//產(chǎn)品類
public class Product {
private String name;
private String sex;
private String clothes;
void setName(String name ){
this.name = name;
}
void setSex(String sex ){
this.sex = sex;
}
void setClothes(String clothes ){
this.clothes = clothes;
}
String showProduct(){
return "姓名:"+name+"\n"+"性別:"+sex+"\n"+"服裝:"+clothes;
}
}
//抽象Builder接口
public interface Builder {
void setName(String name);
void setSex(String sex);
void setClothes(String clothes);
Product build();
}
//Builder接口實(shí)現(xiàn)類
public class ConcreteBuilder implements Builder {
Product mProduct = new Product();
@Override
public void setName(String name) {
mProduct.setName(name);
}
@Override
public void setSex(String sex) {
mProduct.setSex(sex);
}
@Override
public void setClothes(String clothes) {
mProduct.setClothes(clothes);
}
@Override
public Product build() {
return mProduct;
}
}
//裝配過(guò)程
private void buildProduct() {
Builder builder = new ConcreteBuilder();
builder.setName("夏尼采");
builder.setSex("男");
builder.setClothes("迷彩軍裝");
builder.build();
System.out.println( builder.build().showProduct());
}
輸出結(jié)果:
Builder模式 VS 工廠方法模式
工廠模式一般都是創(chuàng)建一個(gè)產(chǎn)品迅箩,注重的是把這個(gè)產(chǎn)品創(chuàng)建出來(lái)就行撤蟆,只要?jiǎng)?chuàng)建出來(lái)家肯,不關(guān)心這個(gè)產(chǎn)品的組成部分。從代碼上看反镇,工廠模式就是一個(gè)方法你弦,用這個(gè)方法就能生產(chǎn)出產(chǎn)品禽作。
建造者模式也是創(chuàng)建一個(gè)產(chǎn)品,但是不僅要把這個(gè)產(chǎn)品創(chuàng)建出來(lái)衷蜓,還要關(guān)系這個(gè)產(chǎn)品的組成細(xì)節(jié)磁浇,組成過(guò)程衍锚。從代碼上看,建造者模式在建造產(chǎn)品時(shí),這個(gè)產(chǎn)品有很多方法,建造者模式會(huì)根據(jù)這些相同方法但是不同執(zhí)行順序建造出不同組成細(xì)節(jié)的產(chǎn)品。
工廠模式關(guān)心整體,建造者模式關(guān)心細(xì)節(jié)
總結(jié)
Builder Pattern作為創(chuàng)建型模式型凳,其著眼點(diǎn)在于Product啰脚,一切都是圍繞這個(gè)Product的創(chuàng)建而展開(kāi)的
Product由于整體較為復(fù)雜粒梦,將其拆分成若干Part泄朴,Builder負(fù)責(zé)將每個(gè)部分build好
Builder提供一個(gè)方法露氮,用來(lái)給ConcreteBuilder 類通過(guò)Builder來(lái)得到最后生成的Product對(duì)象
Our youth never dies,just fades away.
嗨~我是夏尼采畔规,一個(gè)有夢(mèng)想的IT男
每周輸出1篇有用的文章叁扫。
如果文章對(duì)您有幫助莫绣,希望能點(diǎn)個(gè)贊或者關(guān)注我对室。
您的關(guān)注和點(diǎn)贊是對(duì)我最大的鼓勵(lì),感謝您的閱讀