国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

建造者模式(Builder Pattern)

這篇具有很好參考價值的文章主要介紹了建造者模式(Builder Pattern)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

建造者模式

一、模式動機

建造者模式(Builder Pattern)是最復(fù)雜的創(chuàng)建型模式,它用于創(chuàng)建一個包含多個組成部分的復(fù)雜對象,可以返回一個完整的產(chǎn)品對象給用戶。它通過將客戶端與包含多個組成部分的復(fù)雜對象的創(chuàng)建過程分離,使得客戶端無需知道復(fù)雜對象的內(nèi)部組成部分與裝配方式,只需要知道建造者的類型即可。它關(guān)注如何一步一步創(chuàng)建一個復(fù)雜對象,不同的具體建造者定義了不同的創(chuàng)建過程,且具體建造者相互獨立,增加新的建造者非常方便,系統(tǒng)具有較好的擴展性。

二、模式定義

  • 建造者模式(Builder Pattern):將一個復(fù)雜對象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。
  • 建造者模式是一步一步創(chuàng)建一個復(fù)雜的對象,它允許用戶只通過指定復(fù)雜對象的類型和內(nèi)容就可以構(gòu)建它們,用戶不需要知道內(nèi)部的具體構(gòu)建細(xì)節(jié)。建造者模式屬于對象創(chuàng)建型模式。

三、模式結(jié)構(gòu)

建造者模式(Builder Pattern)

產(chǎn)品:一個由多種組件組合生成的復(fù)雜對象

public class Product {
	private String partA; //定義部件,部件可以是任意類型,包括值類型和引用類型
	private String partB;
	private String partC;

	//partA的Getter方法和Setter方法省略
	//partB的Getter方法和Setter方法省略
	//partC的Getter方法和Setter方法省略
}

抽象建造者

public abstract class Builder {
    //創(chuàng)建產(chǎn)品對象
    protected Product product=new Product();
    public abstract void buildPartA();
    public abstract void buildPartB();
    public abstract void buildPartC();

    //返回產(chǎn)品對象
    public Product getResult() {
        return product;
    }
}

具體建造者

public class ConcreteBuilder1 extends Builder{
    public void buildPartA() {
        product.setPartA("A1");
    }
    public void buildPartB() {
        product.setPartB("B1");
    }
    public void buildPartC() {
        product.setPartC("C1");
    }
}

指揮者

public class Director {
    private Builder builder;

    public Director(Builder builder) {
        this.builder=builder;
    }

    public void setBuilder(Builder builder) {
        this.builder=builer;
    }
    //產(chǎn)品構(gòu)建與組裝方法
    public Product construct() {
        builder.buildPartA();
        builder.buildPartB();
        builder.buildPartC();
        return builder.getResult();
    }
}

客戶

......

Builder builder = new ConcreteBuilder1(); //可通過配置文件實現(xiàn)
Director director = new Director(builder);
Product product = director.construct();

......

四、案例實現(xiàn)

案例背景

每一份套餐都是由不同的food和drink組成

案例結(jié)構(gòu)

建造者模式(Builder Pattern)

代碼實現(xiàn)

Meal

public class Meal {

    private String food;
    private String drink;

    public String getFood() {
        return food;
    }

    public void setFood(String food) {
        this.food = food;
    }

    public String getDrink() {
        return drink;
    }

    public void setDrink(String drink) {
        this.drink = drink;
    }
}

MealBuilder

public abstract class MealBuilder {

    protected Meal meal = new Meal();
    public abstract void buildFood();
    public abstract void buildDrink();

    public Meal getMeal() {
        return meal;
    }
}

具體建造者A

public class MealBuilderA extends MealBuilder{
    @Override
    public void buildFood() {
        this.meal.setFood("AFood");
    }

    @Override
    public void buildDrink() {
        this.meal.setDrink("ADrink");
    }
}

具體建造者B

public class MealBuilderB extends MealBuilder{
    @Override
    public void buildFood() {
        this.meal.setFood("BFood");
    }

    @Override
    public void buildDrink() {
        this.meal.setDrink("BDrink");
    }
}

指揮者類

public class Director {

    private MealBuilder mb;

    public void setMb(MealBuilder mb) {
        this.mb = mb;
    }

    public Meal construct(){
        mb.buildFood();
        mb.buildDrink();
        return mb.getMeal();
    }
}

客戶類

public class Client {

    public static void main(String[] args) {

        MealBuilderA mbA = new MealBuilderA();//選擇套餐
        Director director = new Director();//叫服務(wù)員
        director.setMb(mbA);//告知服務(wù)員
        Meal meal = director.construct();//服務(wù)員上套餐

        System.out.println("套餐A:");
        System.out.println(meal.getFood());
        System.out.println(meal.getDrink());

    }

}

五、模式分析

在一個復(fù)雜對象由很多復(fù)雜的屬性組成,不同的屬性組成不同的復(fù)雜對象,建造者使用setter注入不同的屬性,指揮者包含建造者,在指揮者內(nèi)調(diào)用建造者方法獲取復(fù)雜對象文章來源地址http://www.zghlxwxcb.cn/news/detail-437836.html

六、總結(jié)

模式優(yōu)點

  • 客戶端不必知道產(chǎn)品內(nèi)部組成的細(xì)節(jié),將產(chǎn)品本身與產(chǎn)品的創(chuàng)建過程解耦,使得相同的創(chuàng)建過程可以創(chuàng)建不同的產(chǎn)品對象
  • 每一個具體建造者都相對獨立,與其他的具體建造者無關(guān),因此可以很方便地替換具體建造者或增加新的具體建造者,擴展方便,符合開閉原則
  • 可以更加精細(xì)地控制產(chǎn)品的創(chuàng)建過程

模式缺點

  • 建造者模式所創(chuàng)建的產(chǎn)品一般具有較多的共同點,其組成部分相似,如果產(chǎn)品之間的差異性很大,不適合使用建造者模式,因此其使用范圍受到一定的限制
  • 如果產(chǎn)品的內(nèi)部變化復(fù)雜,可能會需要定義很多具體建造者類來實現(xiàn)這種變化,導(dǎo)致系統(tǒng)變得很龐大,增加了系統(tǒng)的理解難度和運行成本

使用情形

簡化

  • 省略抽象建造者角色-(系統(tǒng)中只需要1個建造者時)
  • 省略指揮者角色-(系統(tǒng)中只需要1個建造者是,省略抽象建造者、還可繼續(xù)省略指揮者,讓Builder角色扮演指揮者與建造者雙重角色

到了這里,關(guān)于建造者模式(Builder Pattern)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 設(shè)計模式五:建造者模式(Builder Pattern)

    建造者模式(Builder Pattern)是一種創(chuàng)建型設(shè)計模式,用于通過一系列步驟來構(gòu)建復(fù)雜對象。它將對象的構(gòu)建過程與其表示分離,從而允許相同的構(gòu)建過程可以創(chuàng)建不同的表示。 建造者模式中的幾個角色: 產(chǎn)品(Product):表示被構(gòu)建的復(fù)雜對象。 抽象建造者(Builder):定義了構(gòu)建復(fù)

    2024年02月15日
    瀏覽(27)
  • Java設(shè)計模式之建造者模式詳解(Builder Pattern)

    在日常的開發(fā)工作中,我們常常需要創(chuàng)建一些復(fù)雜的對象。這些對象可能包含許多不同的屬性,并且這些屬性的初始化過程可能相當(dāng)復(fù)雜。在這種情況下,建造者模式是一種非常有用的設(shè)計模式,因為它允許我們分步驟地創(chuàng)建復(fù)雜的對象。 概念和原理: 建造者模式(Builder

    2024年02月09日
    瀏覽(25)
  • (一)創(chuàng)建型設(shè)計模式:3、建造者模式(Builder Pattern)

    (一)創(chuàng)建型設(shè)計模式:3、建造者模式(Builder Pattern)

    目錄 1、建造者模式含義 2、建造者模式的講解 3、使用C++實現(xiàn)建造者模式的實例 4、建造者模式的優(yōu)缺點 5、建造者模式VS工廠模式 1、建造者模式含義 The intent of the Builder design pattern is to separate the construction of a complex object from its representation. By doing so the same construction process ca

    2024年02月13日
    瀏覽(16)
  • 【Java設(shè)計模式】建造者模式 & 注解@Builder

    【Java設(shè)計模式】建造者模式 & 注解@Builder

    將一個復(fù)雜對象的構(gòu)造與它的表示分離 ,使同樣的構(gòu)建過程可以創(chuàng)建不同的表示。它使將一個復(fù)雜的對象分解成多個簡單的對象,然后一步步構(gòu)建而成。 每一個具體建造者都相對獨立,而與其它的具體建造者無關(guān),因此可以很方便地替換具體建造者或增加新的具體建造者,

    2024年02月14日
    瀏覽(18)
  • 【設(shè)計模式】23種設(shè)計模式——建造者模式Builder(原理講解+應(yīng)用場景介紹+案例介紹+Java代碼實現(xiàn))

    【設(shè)計模式】23種設(shè)計模式——建造者模式Builder(原理講解+應(yīng)用場景介紹+案例介紹+Java代碼實現(xiàn))

    建造者模式又叫生成器模式,是一種對象構(gòu)建模式。它可以將復(fù)雜對象的建造過程抽象出來(抽象類別),使這個抽象過程的不同實現(xiàn)方法可以構(gòu)造出不同屬性的對象 建造者模式是一步一步創(chuàng)建一個復(fù)雜的對象,它允許用戶只通過指定復(fù)雜對象的類型和內(nèi)容就可以構(gòu)建它們,不

    2024年02月16日
    瀏覽(25)
  • 【設(shè)計模式——學(xué)習(xí)筆記】23種設(shè)計模式——建造者模式Builder(原理講解+應(yīng)用場景介紹+案例介紹+Java代碼實現(xiàn))

    【設(shè)計模式——學(xué)習(xí)筆記】23種設(shè)計模式——建造者模式Builder(原理講解+應(yīng)用場景介紹+案例介紹+Java代碼實現(xiàn))

    建造者模式又叫生成器模式,是一種對象構(gòu)建模式。它可以將復(fù)雜對象的建造過程抽象出來(抽象類別),使這個抽象過程的不同實現(xiàn)方法可以構(gòu)造出不同屬性的對象 建造者模式是一步一步創(chuàng)建一個復(fù)雜的對象,它允許用戶只通過指定復(fù)雜對象的類型和內(nèi)容就可以構(gòu)建它們,不

    2024年02月15日
    瀏覽(26)
  • 生成器設(shè)計模式(Builder Design Pattern)[論點:概念、圖示、示例、框架中的應(yīng)用、場景]

    生成器設(shè)計模式(Builder Design Pattern)[論點:概念、圖示、示例、框架中的應(yīng)用、場景]

    ??????? 生成器設(shè)計模式(Builder Design Pattern)是一種創(chuàng)建型設(shè)計模式,用于處理具有多個屬性和復(fù)雜構(gòu)造過程的對象。生成器模式通過將對象的構(gòu)建過程與其表示分離,使得相同的構(gòu)建過程可以創(chuàng)建不同的表示。這有助于減少構(gòu)造函數(shù)的參數(shù)個數(shù),提高代碼的可讀性和可維

    2023年04月11日
    瀏覽(25)
  • Builder Pattern —— Structure Class

    建造者模式又稱為 生成器模式 ,主要用于對復(fù)雜對象的構(gòu)建、初始化,它可以 將多個簡單的組件對象按順序一步步組裝起來 , 最終構(gòu)建成一個復(fù)雜的成品對象 。 與工廠系列模式不同的是,建造者模式的主要目的在于把煩瑣的 構(gòu)建過程 從不同對象中抽離出來,使其脫離并

    2024年02月10日
    瀏覽(21)
  • java與es8實戰(zhàn)之一:以builder pattern開篇

    java與es8實戰(zhàn)之一:以builder pattern開篇

    這里分類和匯總了欣宸的全部原創(chuàng)(含配套源碼):https://github.com/zq2599/blog_demos 《java與es8實戰(zhàn)》系列是欣宸與2022年夏季推出的原創(chuàng)系列,如標(biāo)題所述,該系列從一個java程序員視角去學(xué)習(xí)和實踐elasticsearch的8.2版本,目標(biāo)是與大家一起掌握與elasticsearch開發(fā)相關(guān)的技能,以應(yīng)對實

    2024年02月11日
    瀏覽(17)
  • java與es8實戰(zhàn)之六:用JSON創(chuàng)建請求對象(比builder pattern更加直觀簡潔)

    java與es8實戰(zhàn)之六:用JSON創(chuàng)建請求對象(比builder pattern更加直觀簡潔)

    這里分類和匯總了欣宸的全部原創(chuàng)(含配套源碼):https://github.com/zq2599/blog_demos 本文是《java與es8實戰(zhàn)》系列的第六篇,經(jīng)過前面的實戰(zhàn),咱們初步掌握了一些Java對ES的基本操作,通過發(fā)送請求對象(例如CreateIndexResponse)到ES服務(wù)端,達(dá)到操作ES的目的,但是細(xì)心的您可能發(fā)現(xiàn)了:

    2024年02月10日
    瀏覽(18)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包