HOME 首頁
SERVICE 服務(wù)產(chǎn)品
XINMEITI 新媒體代運(yùn)營
CASE 服務(wù)案例
NEWS 熱點(diǎn)資訊
ABOUT 關(guān)于我們
CONTACT 聯(lián)系我們
創(chuàng)意嶺
讓品牌有溫度、有情感
專注品牌策劃15年

    生成器模式(生成器模式的應(yīng)用場景)

    發(fā)布時間:2023-05-28 06:59:26     稿源: 創(chuàng)意嶺    閱讀: 129        

    大家好!今天讓創(chuàng)意嶺的小編來大家介紹下關(guān)于生成器模式的問題,以下是小編對此問題的歸納整理,讓我們一起來看看吧。bRN創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    開始之前先推薦一個非常厲害的Ai人工智能工具,一鍵生成原創(chuàng)文章、方案、文案、工作計劃、工作報告、論文、代碼、作文、做題和對話答疑等等bRN創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    只需要輸入關(guān)鍵詞,就能返回你想要的內(nèi)容,有小程序、在線網(wǎng)頁版、PC客戶端和批量生成器bRN創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    官網(wǎng):https://ai.de1919.com。bRN創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    本文目錄:bRN創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    生成器模式(生成器模式的應(yīng)用場景)bRN創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    JAVA中建造者模式的主要思想,方法是什么,如何設(shè)計的?bRN創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    java有23種經(jīng)典設(shè)計模式,分為三類:創(chuàng)建型、結(jié)構(gòu)型和行為型。Builder,建造者,屬于創(chuàng)建型的設(shè)計模式,相同的還有工廠方法模式、抽象工廠、單例模式和原型模式。建造者模式抽象了對象的實(shí)例化過程,用來幫助系統(tǒng)去創(chuàng)建、組合和表示實(shí)例對象。
    建造者模式中一個常見的栗子就是StringBuilder。
    建造者模式可以說是對工廠模式的擴(kuò)展,工廠類提供了生產(chǎn)單個產(chǎn)品的功能,而建造者模式則可以將各種產(chǎn)品集中起來進(jìn)行統(tǒng)一管理。工廠模式關(guān)注的是整個產(chǎn)品,建造者模式關(guān)注的是產(chǎn)品各組成部分的創(chuàng)建過程。
    比如要創(chuàng)建一輛車,你只關(guān)心汽車本身(之后加以使用),就用工廠模式創(chuàng)建;若還關(guān)注該汽車的各部分是怎么造出來的(或者不同的工廠對產(chǎn)品的各部分的造法不同,就用Builder)。如StringBuilder對字符串的整合,append()、delete()、insert()改變數(shù)據(jù)。

    it is in my housebRN創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    23種經(jīng)典設(shè)計模式的java實(shí)現(xiàn)之生成器模式

    在這里我們使用一個構(gòu)建房屋的場景來說明“生成器”——builder模式的使用。

    這個模式的定義是:

    1、當(dāng)創(chuàng)建復(fù)雜對象的算法應(yīng)該獨(dú)立于該對象的組成部分以及它們的裝**式時。

    2、當(dāng)構(gòu)造過程必須允許被構(gòu)造的對象有不同的表示時。

    簡單的說,它有點(diǎn)像工廠模式,但是最終生成“產(chǎn)品”的是Director而非Factory,Director可以使用的builder來生成產(chǎn)品。而builder——生成器則遵循統(tǒng)一的接口,實(shí)現(xiàn)不同的內(nèi)容,從而達(dá)到將一個復(fù)雜對象的構(gòu)建與它的表示分離的目標(biāo)。

    下面看這個實(shí)際的例子吧:

    首先,這是我們最終需要生成的產(chǎn)品——房屋,它具有房間數(shù)量和門數(shù)量的屬性。

    package com.alex.designpattern.builder;

    /** *//**
    * 最終我們需要的產(chǎn)品——房屋
    *
    * @author <a href="mailto:huqiyes@gmail.com">huqi</a>
    * @serialData 2007
    */
    public class House ...{
    int roomNumber;

    int doorNumber;

    public House() ...{
    roomNumber = 0;
    doorNumber = 0;
    }

    public int getRoomNumber() ...{
    return roomNumber;
    }

    public int getDoorNumber() ...{
    return doorNumber;
    }
    }
    下面就是房屋的真正構(gòu)建者——“生成器”的接口定義,以及它的一個實(shí)現(xiàn)。

    package com.alex.designpattern.builder;

    /** *//**
    * 房屋構(gòu)建者的接口
    *
    * @author <a href="mailto:huqiyes@gmail.com">huqi</a>
    * @serialData 2007
    */
    public interface HouseBuilder ...{
    public void BuildRoom(int roomNo);

    public void BuildDoor(int room1, int room2);

    public House getHouse();
    }

    package com.alex.designpattern.builder;

    public class ConcreteHouseBuilderA implements HouseBuilder ...{
    private House house;

    public ConcreteHouseBuilderA() ...{
    house = new House();
    }

    public void BuildRoom(int roomNo) ...{
    // you can create a new Room added to a House
    house.roomNumber = house.roomNumber + roomNo;
    }

    public void BuildDoor(int room1, int room2) ...{
    // you can create a new door assotiated with 2 room
    // and added this door into a house
    house.doorNumber = house.doorNumber + room1 + room2;
    }

    public House getHouse() ...{
    return house;
    }
    }
    那么,這就是所謂的Director——最終構(gòu)建房屋的“表示者”。我們需要給它提供“生成器”,然后由它來構(gòu)建房屋。

    package com.alex.designpattern.builder;

    /** *//**
    * 房屋(構(gòu)建)的“表示”者,通過它我們可以對同一種構(gòu)建采用不同的表示方式
    *
    * @author <a href="mailto:huqiyes@gmail.com">huqi</a>
    * @serialData 2007
    */
    public class HouseDirector ...{

    public static House CreateHouse(HouseBuilder concreteBuilder) ...{
    concreteBuilder.BuildRoom(1);
    concreteBuilder.BuildRoom(2);
    concreteBuilder.BuildDoor(1, 2);
    concreteBuilder.BuildDoor(2, 1);
    return concreteBuilder.getHouse();
    }
    }
    最后,當(dāng)然是我們的測試啟動類了,可以看到,使用生成器模式的簡單過程就是:

    1、創(chuàng)建生成器對象。

    2、表示者使用此生成器對象構(gòu)建最終產(chǎn)品。

    package com.alex.designpattern.builder;

    /** *//**
    * A test client to create a house <br>
    * but we do not know how the room and door be created
    * <p>
    *
    * Builder(生成器模式)
    * <p>
    * 將一個復(fù)雜對象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。
    */
    public class Test ...{

    public static void main(String[] args) ...{
    ConcreteHouseBuilderA myHouseBuilder = new ConcreteHouseBuilderA();
    House myHouse = HouseDirector.CreateHouse(myHouseBuilder);
    System.out.println("My house has room: " + myHouse.getRoomNumber());
    System.out.println("My house has door: " + myHouse.getDoorNumber());
    }
    }

    生成器模式(生成器模式的應(yīng)用場景)bRN創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    什么是建造者模式bRN創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    建造者模式是設(shè)計模式的一種,將一個復(fù)雜對象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。
    建造者模式
    實(shí)用范圍
    1 當(dāng)創(chuàng)建復(fù)雜對象的算法應(yīng)該獨(dú)立于該對象的組成部分以及它們的裝配方式時。[1]
    2 當(dāng)構(gòu)造過程必須允許被構(gòu)造的對象有不同表示時。
    角色
    在這樣的設(shè)計模式中,有以下幾個角色:
    1 builder:為創(chuàng)建一個產(chǎn)品對象的各個部件指定抽象接口。
    2 ConcreteBuilder:實(shí)現(xiàn)Builder的接口以構(gòu)造和裝配該產(chǎn)品的各個部件,定義并明確它所創(chuàng)建的表示,并 提供一個檢索產(chǎn)品的接口。
    3 Director:構(gòu)造一個使用Builder接口的對象。
    4 Product:表示被構(gòu)造的復(fù)雜對象。ConcreteBuilder創(chuàng)建該產(chǎn)品的內(nèi)部表示并定義它的裝配過程,包含定義組成部件的類,包括將這些部件裝配成最終產(chǎn)品的接口。
    例子
    Builder
    public interface PersonBuilder {
    void buildHead();
    void buildBody();
    void buildFoot();
    Person buildPerson();
    }
    //具體建造工具
    ConcreteBuilder
    public class ManBuilder implements PersonBuilder {
    Person person;
    public ManBuilder() {
    person = new Person();
    }
    public void buildbody() {
    person.setBody("建造男人的身體");
    }
    public void buildFoot() {
    person.setFoot("建造男人的腳");
    }
    public void buildHead() {
    person.setHead("建造男人的頭");
    }
    public Person buildPerson() {
    return person;
    }
    }
    //建造者
    Director
    public class PersonDirector {
    public Person constructPerson(PersonBuilder pb) {
    pb.buildHead();
    pb.buildBody();
    pb.buildFoot();
    return pb.buildPerson();
    }
    }
    Product
    public class Person {
    private String head;
    private String body;
    private String foot;
    public String getHead() {
    return head;
    }
    public void setHead(String head) {
    this.head = head;
    }
    public String getBody() {
    return body;
    }
    public void setBody(String body) {
    this.body = body;
    }
    public String getFoot() {
    return foot;
    }
    public void setFoot(String foot) {
    this.foot = foot;
    }
    }
    public class Man extends Person {
    }
    Test
    public class Test{
    public static void main(String[] args) {
    PersonDirector pd = new PersonDirector();
    Person person = pd.constructPerson(new ManBuilder());
    System.out.println(person.getBody());
    System.out.println(person.getFoot());
    System.out.println(person.getHead());
    }
    }
    result
    建造男人的身體
    建造男人的腳
    建造男人的頭
    擴(kuò)展
    建造者模式在使用過程中可以演化出多種形式:
    省略抽象建造者角色
    如果系統(tǒng)中只需要一個具體的建造者的話,可以省略掉抽象建造者。這是代碼可能如下:
    class FoodManager
    {
    private:
    BuilderA * builder;
    public:
    FoodManager() {builder = new BuilderA();};
    void Construct()
    {
    builder->BuildRiceNoodles();
    builder->BuildDrink();
    builder->BuildCoolDish();
    }
    };
    省略指導(dǎo)者角色
    在具體建造者只有一個的情況下,如果抽象建造者角色已經(jīng)被省略掉,那么還可以省略掉指導(dǎo)者角色,讓Builder自己扮演指導(dǎo)者和建造者雙重角色。這是代碼可能如下:
    //builder
    class Builder
    {
    private:
    Food * food;
    public:
    Builder(){food = new Food();}
    void BuildRiceNoodles() {//..};
    void BuildCoolDish(){//..};
    void BuildDrink(){//..};
    Food * getFood(){return food;}
    void Construct()
    {
    BuildRiceNoodles();
    BuildCoolDish();
    BuildDrink();
    }
    };
    同時,客戶端也需要進(jìn)行相應(yīng)的調(diào)整,如下:
    //client
    int _tmain(int argc, _TCHAR* argv[])
    {
    Builder * builder = new Builder();
    builder->Construct();
    Food *food = builder->getFood();
    food->show();
    return 0;
    }
    C#中的StringBuilder就是這樣一個例子。

    以上就是關(guān)于生成器模式相關(guān)問題的回答。希望能幫到你,如有更多相關(guān)問題,您也可以聯(lián)系我們的客服進(jìn)行咨詢,客服也會為您講解更多精彩的知識和內(nèi)容。bRN創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司


    推薦閱讀:

    vi在線設(shè)計免費(fèi)(vi設(shè)計在線生成)

    免費(fèi)文字設(shè)計(免費(fèi)文字設(shè)計圖片在線生成)

    自動生成網(wǎng)頁(cp名自動生成網(wǎng)頁)

    好聽高音歌曲排行榜(好聽高音歌曲排行榜最新)

    電商考什么證實(shí)用(電商考什么證有用)