最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java結(jié)構(gòu)型設(shè)計(jì)模式中建造者模式示例詳解

 更新時間:2022年09月23日 09:40:38   作者:丨Jack_Chen丨  
建造者模式,是一種對象構(gòu)建模式 它可以將復(fù)雜對象的建造過程抽象出來,使這個抽象過程的不同實(shí)現(xiàn)方法可以構(gòu)造出不同表現(xiàn)的對象。本文將通過示例講解建造者模式,需要的可以參考一下

建造者模式

概述

建造者模式(Builder Pattern)屬于創(chuàng)建型模式。

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

簡而言之:建造者模式就是使用多個簡單的對象一步一步構(gòu)建成一個復(fù)雜的對象。

建造者模式適用于創(chuàng)建對象需要很多步驟,但是步驟的順序不一定固定。如果一個對象有非常復(fù)雜的內(nèi)部結(jié)構(gòu)(很多屬性),可以將復(fù)雜對象的創(chuàng)建和使用進(jìn)行分離。

JDK的StringBuilder類中append()方法,提供了開放構(gòu)造步驟,最后調(diào)用toString0方法就可以獲得一個構(gòu)造好的完整字符串。其就是一個建造者模式的體現(xiàn)。

角色

建造者模式提供四個主要角色:

1.產(chǎn)品(Product)

要創(chuàng)建的產(chǎn)品類對象。

2.建造者抽象(Builder)

建造者的抽象類,規(guī)范產(chǎn)品對象的各個組成部分的建造,一般由子類實(shí)現(xiàn)具體的建造過程。

3.建造者(ConcreteBuilder)

具體的Builder類,根據(jù)不同的業(yè)務(wù)邏輯,具體化對象的各個組成部分的創(chuàng)建。

4.調(diào)用者(Director)

調(diào)用具體的建造者,來創(chuàng)建對象的各個部分,在指導(dǎo)者中不涉及具體產(chǎn)品的信息,只負(fù)責(zé)保正對象各部分完整創(chuàng)建或按某種順序創(chuàng)建。

優(yōu)缺點(diǎn)

優(yōu)點(diǎn):

1.封裝性好,創(chuàng)建和使用分離。

2.擴(kuò)展性好,建造類之間獨(dú)立、一定程度上解耦。

缺點(diǎn):

1.產(chǎn)生多余的Builder對象。

2.產(chǎn)品內(nèi)部發(fā)生變化,建造者都要修改,成本較大。

應(yīng)用場景

1.需要生成的對象具有復(fù)雜的內(nèi)部結(jié)構(gòu)。

2.需要生成的對象內(nèi)部屬性本身相互依賴。

3.相同的方法,不同的執(zhí)行順序,產(chǎn)生不同的結(jié)果。

4.當(dāng)初始化一個對象特別復(fù)雜,參數(shù)多,而且很多參數(shù)都具有默認(rèn)值時。

基本使用

生產(chǎn)一輛Car的過程,需要一系列的步驟,假設(shè)這些步驟可以隨意調(diào)整組合。

創(chuàng)建產(chǎn)品類

public class Car {
    /**
     * 名稱
     */
    private String name;
    /**
     * 顏色
     */
    private String color;
    /**
     * 價格
     */
    private String price;
    /**
     * 類型
     */
    private String type;
    /**
     * 發(fā)動機(jī)
     */
    private String engine;
    /**
     * 輪子
     */
    private String wheel;
}

創(chuàng)建建造者類

創(chuàng)建建造者類,將復(fù)雜的構(gòu)造過程封裝起來,構(gòu)造步驟由使用者決定

public class CarBuilder {
    private Car car = new Car();
    public CarBuilder addName(String name) {
        car.setName(name);
        return this;
    }
    public CarBuilder addColor(String color) {
        car.setColor(color);
        return this;
    }
    public CarBuilder addPrice(String price) {
        car.setPrice(price);
        return this;
    }
    public CarBuilder addType(String type) {
        car.setType(type);
        return this;
    }
    public CarBuilder addEngine(String engine) {
        car.setEngine(engine);
        return this;
    }
    public CarBuilder addWheel(String wheel) {
        car.setWheel(wheel);
        return this;
    }
    public Car build() {
        return car;
    }
}

使用

    public static void main(String[] args) {
        CarBuilder carBuilder = new CarBuilder();
        Car car = carBuilder.addName("奔馳")
                .addColor("紅色")
                .addPrice("100萬")
                .addType("轎車")
                .addEngine("1.8T")
                .addWheel("18寸")
                .build();
        System.out.println(car);
    }

鏈?zhǔn)綄懛?/h2>

建造者模式通常是采用鏈?zhǔn)骄幊痰姆绞綐?gòu)造對象。

具體做法:

將產(chǎn)品類添加到建造者類中作為內(nèi)部類,然后將構(gòu)造步驟添加進(jìn)去,完成每個步驟,都返回this關(guān)鍵字。

創(chuàng)建產(chǎn)品類與建造者類

public class CarBuilder {
    @Data
    public class Car {
        /**
         * 品牌
         */
        private String name;
        /**
         * 顏色
         */
        private String color;
        /**
         * 價格
         */
        private String price;
        /**
         * 類型
         */
        private String type;
        /**
         * 發(fā)動機(jī)
         */
        private String engine;
        /**
         * 輪子
         */
        private String wheel;
    }
    private Car car = new Car();
    public CarBuilder addName(String name) {
        car.setName(name);
        return this;
    }
    public CarBuilder addColor(String color) {
        car.setColor(color);
        return this;
    }
    public CarBuilder addPrice(String price) {
        car.setPrice(price);
        return this;
    }
    public CarBuilder addType(String type) {
        car.setType(type);
        return this;
    }
    public CarBuilder addEngine(String engine) {
        car.setEngine(engine);
        return this;
    }
    public CarBuilder addWheel(String wheel) {
        car.setWheel(wheel);
        return this;
    }
    public Car build() {
        return car;
    }
}

使用

    public static void main(String[] args) {
        CarBuilder carBuilder = new CarBuilder();
        carBuilder.addName("奔馳").addColor("紅色").addPrice("100萬").addType("跑車").addEngine("發(fā)動機(jī)").addWheel("輪子");
        CarBuilder.Car car = carBuilder.build();
        System.out.println(car);
    }

到此這篇關(guān)于Java結(jié)構(gòu)型設(shè)計(jì)模式中建造者模式示例詳解的文章就介紹到這了,更多相關(guān)Java建造者模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringMVC實(shí)現(xiàn)Controller的三種方式總結(jié)

    SpringMVC實(shí)現(xiàn)Controller的三種方式總結(jié)

    這篇文章主要介紹了SpringMVC實(shí)現(xiàn)Controller的三種方式總結(jié),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Jmeter跨線程組傳值調(diào)用實(shí)現(xiàn)圖解

    Jmeter跨線程組傳值調(diào)用實(shí)現(xiàn)圖解

    這篇文章主要介紹了Jmeter跨線程組傳值調(diào)用實(shí)現(xiàn)圖解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-07-07
  • Java面向?qū)ο蠡A(chǔ)知識之抽象類和接口

    Java面向?qū)ο蠡A(chǔ)知識之抽象類和接口

    這篇文章主要介紹了Java面向?qū)ο蟮某橄箢惡徒涌?文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)java基礎(chǔ)的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-11-11
  • java 文件的操作Path、Paths、Files詳解

    java 文件的操作Path、Paths、Files詳解

    Java NIO(New I/O)是Java 7中引入的一項(xiàng)重要特性,旨在提供一種更加靈活和高效的文件處理方式,NIO.2主要通過Path、Paths和Files三個核心組件來實(shí)現(xiàn)對文件和目錄的操作,本文給大家介紹java 文件的操作Path、Paths、Files的相關(guān)知識,感興趣的朋友一起看看吧
    2024-10-10
  • Spring線程池ThreadPoolTaskExecutor配置詳情

    Spring線程池ThreadPoolTaskExecutor配置詳情

    本篇文章主要介紹了Spring線程池ThreadPoolTaskExecutor配置詳情,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • SpringBoot中使用MyBatis-Plus詳細(xì)步驟

    SpringBoot中使用MyBatis-Plus詳細(xì)步驟

    MyBatis-Plus是MyBatis的增強(qiáng)工具,簡化了MyBatis的使用,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2025-01-01
  • Java框架入門之簡單介紹SpringBoot框架

    Java框架入門之簡單介紹SpringBoot框架

    今天給大家?guī)淼氖顷P(guān)于Java的相關(guān)知識,文章圍繞著SpringBoot框架展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • 基于Ant路徑匹配規(guī)則AntPathMatcher的注意事項(xiàng)

    基于Ant路徑匹配規(guī)則AntPathMatcher的注意事項(xiàng)

    這篇文章主要介紹了基于Ant路徑匹配規(guī)則AntPathMatcher的注意事項(xiàng),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • java求解集合的子集的實(shí)例

    java求解集合的子集的實(shí)例

    這篇文章主要介紹了 java求解集合的子集的實(shí)例的相關(guān)資料,希望通過本文能幫助到大家,讓大家掌握這樣的方法,需要的朋友可以參考下
    2017-10-10
  • Java中動態(tài)設(shè)置JVM參數(shù)的方法總結(jié)

    Java中動態(tài)設(shè)置JVM參數(shù)的方法總結(jié)

    通過動態(tài)設(shè)置JVM參數(shù),開發(fā)者可以更有效地管理資源使用和優(yōu)化性能,本文將詳細(xì)闡述如何在Java中動態(tài)設(shè)置JVM參數(shù),感興趣的小伙伴可以了解下
    2024-12-12

最新評論

阿荣旗| 荣昌县| 同德县| 巴楚县| 邛崃市| 唐河县| 玛多县| 无为县| 板桥市| 太谷县| 永新县| 大英县| 米林县| 页游| 临猗县| 海丰县| 湟源县| 右玉县| 宁武县| 富蕴县| 灵台县| 泽州县| 萨迦县| 阿拉善盟| 雷山县| 临沭县| 绍兴县| 阿瓦提县| 呈贡县| 海城市| 米脂县| 南召县| 信阳市| 额敏县| 阿尔山市| 福海县| 和龙市| 如东县| 保康县| 安岳县| 白银市|