国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Java設(shè)計模式之(三)——建造者模式

Forelax / 3596人閱讀

摘要:建造者模式實(shí)現(xiàn)建造者模式實(shí)現(xiàn)創(chuàng)建抽象建造者類創(chuàng)建具體建造者類。建造者模式使用場景建造者模式使用場景相同的方法,不同的執(zhí)行順序,產(chǎn)生不同的事件結(jié)果時,可以采用建造者模式。

1、什么是建造者模式

Separate the construction of a complex object from its representation so that the same construction process can create different representations.

將一個復(fù)雜對象的構(gòu)建與它的表示分離, 使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。

說人話:將構(gòu)造復(fù)雜對象的過程和組成對象的部件解耦。就像攢電腦一樣,不管什么品牌的配件,只要兼
容就可以裝上;同樣,一樣的配件,可以有好多組裝的方式。更直接點(diǎn)就是同一個類,通過內(nèi)部不同屬性狀態(tài)構(gòu)造不同的對象。

2、建造者模式定義

在建造者模式中,有 4 個定義:

①、Product(產(chǎn)品類) :我們具體需要生成的類對象

②、Builder(抽象建造者類):為我們需要生成的類對象,構(gòu)建不同的模塊屬性,即:公開構(gòu)建產(chǎn)品類的屬性,隱藏產(chǎn)品類的其他功能。

③、ConcreteBuilder(具體建造者類):實(shí)現(xiàn)抽象類定義的所有方法,并返回一個組建好的對象。

④、Director(導(dǎo)演類):確定構(gòu)建我們的類對象具體有哪些模塊屬性,在實(shí)際應(yīng)用中可以不需要這個角色,直接通過client處理。

3、實(shí)例

比如我們?nèi)ベI車,一般同一輛車會有多個版本,根據(jù)配置不一樣,分為經(jīng)典版、舒適版、豪華版等,比如經(jīng)典版是手動擋手動座椅,舒適版是自動擋全景天窗等。

public class Car {    // 車名稱    private String name;    // 自動擋    private String automaticCatch;    // 手動擋    private String manualTransmission;    // 全景天窗    private String panoramicSunroof;    // 自動座椅    private String automaticSeat;    // 手動座椅    private String manualSeat;    // 倒車影像    private String reversingImage;    //省略get/set方法}

3.1 普通實(shí)現(xiàn)

public class GeneralTest {    public Car getCarInstance(String carName){        Car car = new Car();        if("經(jīng)典版".equals(carName)){            car.setName("經(jīng)典版");            car.setManualTransmission("手動擋");        }else if("舒適版".equals(carName)){            car.setName("舒適版");            car.setAutomaticCatch("自動擋");            car.setManualSeat("手動座椅");        }else if("豪華版".equals(carName)){            car.setName("豪華版");            car.setAutomaticCatch("自動擋");            car.setAutomaticSeat("自動座椅");            car.setReversingImage("倒車影像");            car.setPanoramicSunroof("全景天窗");        }else{            throw new IllegalArgumentException("carName is error: carName="+carName);        }        return car;    }}

注意,并不是說高版本汽車一定具有低版本所有配置,比如舒適版配置是手動座椅,豪華版是自動座椅,而且不同版本之間配置有交叉。

從上面可以看出,根據(jù)汽車類型,我們可以創(chuàng)建相應(yīng)配置的汽車,但其實(shí)汽車的配置是有很多的,種類一旦多了,上面的代碼就會顯得很臃腫,也不好維護(hù),于是我們用建造者模式來重構(gòu)。

3.2 建造者模式實(shí)現(xiàn)

①、創(chuàng)建抽象建造者類

public abstract class CarBuilder {    public abstract Car buildClassic();    public abstract Car buildComfortable();    public abstract Car buildLuxury();}

②、創(chuàng)建具體建造者類。對抽象建造者類的抽象方法進(jìn)行實(shí)現(xiàn)賦值,達(dá)到我們所需要的結(jié)果。

public class CarConcreteBuilder extends CarBuilder{    @Override    public Car buildClassic() {        Car car = new Car();        car.setName("經(jīng)典版");        car.setManualTransmission("手動擋");        return car;    }    @Override    public Car buildComfortable() {        Car car = new Car();        car.setName("舒適版");        car.setAutomaticCatch("自動擋");        car.setManualSeat("手動座椅");        return car;    }    @Override    public Car buildLuxury() {        Car car = new Car();        car.setName("豪華版");        car.setAutomaticCatch("自動擋");        car.setAutomaticSeat("自動座椅");        car.setReversingImage("倒車影像");        car.setPanoramicSunroof("全景天窗");        return car;    }}

③、創(chuàng)建我們的導(dǎo)演類,指導(dǎo)我們怎么去創(chuàng)建對象

public class CarDirector {    private CarBuilder carBuilder;    public CarDirector(CarBuilder carBuilder){        this.carBuilder = carBuilder;    }    public Car classicConstruct(){        return carBuilder.buildClassic();    }    public Car comfortableConstruct(){        return carBuilder.buildComfortable();    }    public Car luxuryConstruct(){        return carBuilder.buildLuxury();    }}

④、測試

public class BuilderTest {    public static void main(String[] args) {        CarBuilder carBuilder = new CarConcreteBuilder();        CarDirector carDirector = new CarDirector(carBuilder);        Car classicCar = carDirector.classicConstruct();        System.out.println(classicCar);        Car comfortableCar = carDirector.comfortableConstruct();        System.out.println(comfortableCar);    }}

另外,對于不同配置之間有互斥關(guān)系,比如有了手動擋,就不可能有自動擋,屬性之間的關(guān)系我們也可以在具體建造者類 CarConcreteBuilder 進(jìn)行設(shè)置。

4、與工廠模式區(qū)別

前面我們介紹工廠模式時說了由工廠類來負(fù)責(zé)創(chuàng)建對象,而建造者模式也是讓具體建造者類負(fù)責(zé)創(chuàng)建對象,那這兩者有什么區(qū)別呢?

實(shí)際上工廠模式是用來創(chuàng)建不同但是相關(guān)類型的對象(繼承同一父類或者接口的一組子類),由給定的參數(shù)來決定創(chuàng)建哪種類型的對象。而建造者模式是用來創(chuàng)建一種類型的復(fù)雜對象,通過設(shè)置不同的可選參數(shù),“定制化”地創(chuàng)建不同的對象。

有這樣一個例子可以形象的解釋:

顧客走進(jìn)一家餐館點(diǎn)餐,我們利用工廠模式,根據(jù)用戶不同的選擇,來制作不同的食物,比如披薩、漢堡、沙拉。對于披薩來說,用戶又有各種配料可以定制,比如奶酪、西紅柿、起司,我們通過建造者模式根據(jù)用戶選擇的不同配料來制作披薩。

5、建造者模式優(yōu)點(diǎn)

①、封裝性

使用建造者模式可以使客戶端不必知道產(chǎn)品內(nèi)部組成的細(xì)節(jié), 如例子中我們就不需要關(guān)心每一種版本汽車內(nèi)部是如何實(shí)現(xiàn)的, 產(chǎn)生的對象類型就是Car。

②、建造者獨(dú)立,容易擴(kuò)展

其實(shí)對于上面例子中的 CarConcreteBuilder 類,有三個方法,分別構(gòu)造經(jīng)典版、舒適版、豪華版汽車,每個方法內(nèi)部是不受影響的,或者我們還可以直接把這一個類拆成三個類。

③、便于控制細(xì)節(jié)風(fēng)險

由于具體每個建造者過程是獨(dú)立的,因此可以對過程更加細(xì)化,而不會對其它模塊產(chǎn)生影響。

6、建造者模式使用場景

①、相同的方法, 不同的執(zhí)行順序, 產(chǎn)生不同的事件結(jié)果時, 可以采用建造者模式。

②、多個部件或零件, 都可以裝配到一個對象中, 但是產(chǎn)生的運(yùn)行結(jié)果又不相同時, 則可以使用該模式。

③、產(chǎn)品類非常復(fù)雜, 或者產(chǎn)品類中的調(diào)用順序不同產(chǎn)生了不同的效能, 這個時候使用建造者模式非常合適。

作者:IT可樂
出處:http://www.cnblogs.com/ysocean/

資源:微信搜【IT可樂】關(guān)注我,回復(fù) 【電子書】有我特別篩選的免費(fèi)電子書。
本文版權(quán)歸作者所有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意不能轉(zhuǎn)載,否則保留追究法律責(zé)任的權(quán)利。
?

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/123991.html

相關(guān)文章

  • #yyds干貨盤點(diǎn)#Java設(shè)計模式)——建造模式

    1、什么是建造者模式Separate the construction of a complex object from its representation so that the same construction process can create different representations.將一個復(fù)雜對象的構(gòu)建與它的表示分離, 使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。 說人話:將構(gòu)...

    番茄西紅柿 評論0 收藏2637
  • 我的Java設(shè)計模式-建造模式

    摘要:汽車本身就是復(fù)雜產(chǎn)品對象,其制造過程可以形象的表示建造者模式。另一輛法拉利,。法拉利具體建造者代碼如下構(gòu)造法拉利的第一部分。咻咻法拉利已造好三建造者模式的優(yōu)缺點(diǎn)優(yōu)點(diǎn)降低代碼耦合度。 在未上大學(xué)之前,一直有個夢想I have a dream!,就是能成為一位汽車工程師,一直幻想著開著自己設(shè)計的汽車飛奔在公路上,迷倒了萬千少女。咳咳~~雖然現(xiàn)在沒實(shí)現(xiàn)我的dream,但夢想還是得有的。 說到...

    elisa.yang 評論0 收藏0
  • 設(shè)計模式建造模式

    摘要:建造者實(shí)現(xiàn)抽象類的所有未實(shí)現(xiàn)的方法,具體來說一般是兩項(xiàng)任務(wù)組建產(chǎn)品返回組建好的產(chǎn)品。 0x01.定義與類型 定義:將一個復(fù)雜對象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。 用戶只需指定需要建造的類型就可以得到他們,建造過程及細(xì)節(jié)不需要知道 類型:創(chuàng)建型 實(shí)現(xiàn)建造模式的兩種方式 1.抽象建造者 UML: showImg(https://segmentfault.co...

    banana_pi 評論0 收藏0
  • 深入理解建造模式 ——組裝復(fù)雜的實(shí)例

    摘要:而建造者模式則是要求按照指定的藍(lán)圖建造產(chǎn)品,它的主要目的是通過組裝零配件而產(chǎn)生一個新產(chǎn)品。最后通過一個套餐實(shí)例,介紹了建造者模式在實(shí)例中的基本使用手段。 歷史文章回顧: 設(shè)計模式專欄 深入理解單例模式 深入理解工廠模式 歷史優(yōu)質(zhì)文章推薦: 分布式系統(tǒng)的經(jīng)典基礎(chǔ)理論 可能是最漂亮的Spring事務(wù)管理詳解 面試中關(guān)于Java虛擬機(jī)(jvm)的問題看這篇就夠了 無論是在現(xiàn)實(shí)世界中還是在軟件...

    sanyang 評論0 收藏0

發(fā)表評論

0條評論

Forelax

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<