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

Java設(shè)計模式之創(chuàng)建型-建造者模式(UML類圖+案例分析)

這篇具有很好參考價值的文章主要介紹了Java設(shè)計模式之創(chuàng)建型-建造者模式(UML類圖+案例分析)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

目錄

一、基本概念

二、UML類圖

三、角色設(shè)計?

四、案例分析

五、總結(jié)


一、基本概念

建造者模式是一種創(chuàng)建型設(shè)計模式,它使我們將一個復(fù)雜對象的構(gòu)建步驟分離出來,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。該模式的目的是將構(gòu)建復(fù)雜對象的過程抽象化,從而減少代碼的重復(fù)和復(fù)雜度。

在建造者模式中,我們通過Builder接口或抽象類定義了一個標(biāo)準(zhǔn)的構(gòu)建流程,然后讓不同的具體構(gòu)造者按照這個標(biāo)準(zhǔn)來實(shí)現(xiàn)自己的構(gòu)建流程。同時,我們還定義了一個指導(dǎo)者(Director)類,用于按照特定的順序執(zhí)行構(gòu)建流程,從而完成對象的構(gòu)建。

二、UML類圖

Java設(shè)計模式之創(chuàng)建型-建造者模式(UML類圖+案例分析),設(shè)計模式,Java,java,設(shè)計模式,建造者模式

三、角色設(shè)計?

角色 描述
產(chǎn)品 被建造的復(fù)雜對象
抽象建造者 定義了一個創(chuàng)建產(chǎn)品各個子部件的抽象接口
具體建造者 實(shí)現(xiàn)Builder接口,構(gòu)建并組裝各個部件
指導(dǎo)者 調(diào)用建造者接口完成復(fù)雜對象的創(chuàng)建,隔離了客戶與對象的生產(chǎn)過程

四、案例分析

例如有如下一個場景:日常生活中手機(jī)也分為有基礎(chǔ)入門、中端和高端旗艦機(jī)三個檔次的手機(jī),客戶這時候提出了一個需求:我想購買一部基礎(chǔ)入門機(jī)和一部高端旗艦機(jī)!客戶是完全不需要知曉整部手機(jī)的生產(chǎn)過程,只需要傳達(dá)給指揮者,指揮者通過對應(yīng)的手機(jī)建造者去控制生產(chǎn)對應(yīng)的手機(jī)即可,下面我們通過代碼實(shí)現(xiàn)這個案例:

手機(jī)類:

包含了基礎(chǔ)的核心處理器、內(nèi)存和電池3個參數(shù)。

public class Phone {

    private String cpu;

    private String memory;

    public String getCpu() {
        return cpu;
    }

    public void setCpu(String cpu) {
        this.cpu = cpu;
    }

    public String getMemory() {
        return memory;
    }

    public void setMemory(String memory) {
        this.memory = memory;
    }

    public String getBattery() {
        return battery;
    }

    public void setBattery(String battery) {
        this.battery = battery;
    }

    private String battery;
}

建造者抽象類:

提供了一個基礎(chǔ)的手機(jī)對象,建造核心處理器,內(nèi)存和電池三個抽象方法,返回建造完畢的手機(jī)對象。

public abstract class Builder {

    protected Phone phone = new Phone();

    public abstract void buildCpu();

    public abstract void buildMemory();

    public abstract void buildBattery();

    public Phone builder(){
        return this.phone;
    }
}

一個基礎(chǔ)手機(jī)實(shí)現(xiàn)抽象建造者類:

public class BasicPhoneBuilder extends Builder{


    @Override
    public void buildCpu() {
        System.out.println("麒麟980");
        phone.setCpu("麒麟980");
    }

    @Override
    public void buildMemory() {
        System.out.println("8G內(nèi)存");
        phone.setMemory("8G內(nèi)存");
    }

    @Override
    public void buildBattery() {
        System.out.println("22.5W快充");
        phone.setBattery("22.5W快充");
    }
}

一個高端手機(jī)實(shí)現(xiàn)建造者抽象類:

public class AdvancedPhoneBuilder extends Builder{


    @Override
    public void buildCpu() {
        System.out.println("麒麟9000");
        phone.setCpu("麒麟9000");
    }

    @Override
    public void buildMemory() {
        System.out.println("12G內(nèi)存");
        phone.setMemory("12G內(nèi)存");
    }

    @Override
    public void buildBattery() {
        System.out.println("66W快充");
        phone.setBattery("66W快充");
    }
}

創(chuàng)建一個指揮者,用于建造出不同類型手機(jī):

public class Director {

    private Builder builder;

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

    public Phone builder(){
        builder.buildCpu();
        builder.buildMemory();
        builder.buildBattery();
        return builder.builder();
    }
}

客戶端:

public class Client {

    public static void main(String[] args) {
        Builder basicPhoneBuilder = new BasicPhoneBuilder();
        Phone basicPhone = new Director(basicPhoneBuilder).builder();

        Builder advancedPhoneBuilder = new AdvancedPhoneBuilder();
        Phone advancedPhone = new Director(advancedPhoneBuilder).builder();
    }
}

運(yùn)行結(jié)果如下:

Java設(shè)計模式之創(chuàng)建型-建造者模式(UML類圖+案例分析),設(shè)計模式,Java,java,設(shè)計模式,建造者模式

五、總結(jié)

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

1、將構(gòu)建復(fù)雜對象的過程封裝起來,簡化了代碼結(jié)構(gòu)和邏輯,客戶端不需要知道產(chǎn)品內(nèi)部組成的細(xì)節(jié),將產(chǎn)品本身與產(chǎn)品的創(chuàng)建過程解耦,使得相同的過程可以創(chuàng)建出不同的產(chǎn)品對象。

2、每一個建造者都相對獨(dú)立,和其他建造者沒有關(guān)系,因此可以很方便的替換具體的建造者或者添加新的具體建造者,客戶端使用不同的建造者可以獲得不同的產(chǎn)品對象,系統(tǒng)擴(kuò)展方便,符合“開閉原則”。

缺點(diǎn):

1、添加新的部件需要修改抽象類和具體構(gòu)造者的代碼。

2、建造者模式所創(chuàng)建的產(chǎn)品都有很多的共同之處,組成部分相似,如果產(chǎn)品之間的差異性很大,則組成部分不同,不適合使用建造者模式,因此范圍很局限。

應(yīng)用場景:

1、相同的方法,不同的執(zhí)行順序,產(chǎn)生不同的事件結(jié)果時。

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

3、產(chǎn)品類非常復(fù)雜,或者產(chǎn)品類中的調(diào)用順序不同產(chǎn)生了不同的效能。

4、初始化一個對象消耗的資源非常大,則可以通過建造者模式分步初始化。

符合的設(shè)計原則:

1、單一職責(zé)原則(Single Responsibility Principle)

建造者僅負(fù)責(zé)構(gòu)建產(chǎn)品,產(chǎn)品僅負(fù)責(zé)描述自身,職責(zé)單一。

2、開閉原則(Open Closed Principle)

可以新增建造者而不影響已有代碼,符合開閉原則。

3、里氏替換原則(Liskov Substitution Principle)

擴(kuò)展新的建造者仍遵循相同接口,不影響客戶端使用。

4、依賴倒轉(zhuǎn)原則(Dependency Inversion Principle)

建造者和指揮者依賴抽象接口,不依賴具體實(shí)現(xiàn)類。

5、接口隔離原則(Interface Segregation Principle)

產(chǎn)品接口和建造者接口職責(zé)單一,不會強(qiáng)迫實(shí)現(xiàn)不需要的方法。

建造者模式將復(fù)雜對象的構(gòu)建與表示分離,使得相同的構(gòu)建過程可以創(chuàng)建不同表示。它是一步一步創(chuàng)建一個復(fù)雜對象的最佳模式。文章來源地址http://www.zghlxwxcb.cn/news/detail-552371.html

到了這里,關(guān)于Java設(shè)計模式之創(chuàng)建型-建造者模式(UML類圖+案例分析)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • Java設(shè)計模式之結(jié)構(gòu)型-橋接模式(UML類圖+案例分析)

    Java設(shè)計模式之結(jié)構(gòu)型-橋接模式(UML類圖+案例分析)

    目錄 一、基礎(chǔ)概念 二、UML類圖 三、角色設(shè)計 四、案例分析 4.1、支付方式 4.2、支付渠道? 五、總結(jié) 橋接模式(Bridge Pattern)是一種結(jié)構(gòu)型設(shè)計模式,其主要目的是“將抽象部分與實(shí)現(xiàn)部分分離,使它們都可以獨(dú)立地變化”。 橋接模式的核心思想是把抽象(abstraction)與實(shí)現(xiàn)

    2024年02月13日
    瀏覽(22)
  • Java設(shè)計模式之行為型-責(zé)任鏈模式(UML類圖+案例分析)

    Java設(shè)計模式之行為型-責(zé)任鏈模式(UML類圖+案例分析)

    目錄 一、基礎(chǔ)概念 二、UML類圖 三、角色設(shè)計 四、案例分析 4.1、在Java中實(shí)現(xiàn) 4.2、在SpringBoot中實(shí)現(xiàn)? 五、總結(jié)? 責(zé)任鏈模式是一種行為設(shè)計模式,它允許你將請求沿著處理者鏈進(jìn)行發(fā)送。請求會被鏈上每個處理者處理,直到請求被處理完畢。該模式主要解決的是請求的發(fā)送者和

    2024年02月15日
    瀏覽(22)
  • Java設(shè)計模式之行為型-迭代器模式(UML類圖+案例分析)

    Java設(shè)計模式之行為型-迭代器模式(UML類圖+案例分析)

    目錄 一、基礎(chǔ)概念 二、UML類圖 三、角色設(shè)計 四、案例分析 五、總結(jié) 迭代器模式是一種常用的設(shè)計模式,它主要用于遍歷集合對象,提供一種方法順序訪問一個聚合對象中的各個元素,而又不暴露該對象的內(nèi)部表示。 舉個簡單的比喻,聚合對象像一個存放蘋果的籃子,迭代

    2024年02月16日
    瀏覽(63)
  • Java設(shè)計模式之結(jié)構(gòu)型-組合模式(UML類圖+案例分析)

    Java設(shè)計模式之結(jié)構(gòu)型-組合模式(UML類圖+案例分析)

    目錄 一、基礎(chǔ)概念 二、UML類圖 三、角色設(shè)計 四、案例分析 4.1、基本實(shí)現(xiàn) 4.2、菜單遍歷? 五、總結(jié)? 組合模式(Composite Pattern)又叫部分-整體模式,它通過將對象組合成樹形結(jié)構(gòu)來表示“整體-部分”的層次關(guān)系,允許用戶統(tǒng)一單個對象和組合對象的處理邏輯。 角色 描述

    2024年02月16日
    瀏覽(25)
  • Java設(shè)計模式之行為型-訪問者模式(UML類圖+案例分析)

    Java設(shè)計模式之行為型-訪問者模式(UML類圖+案例分析)

    目錄 一、基礎(chǔ)概念 二、UML類圖 三、角色設(shè)計 四、案例分析 五、總結(jié) 訪問者模式是一種對象行為型設(shè)計模式,它能夠在不修改已有對象結(jié)構(gòu)的前提下,為對象結(jié)構(gòu)中的每個對象提供新的操作。 訪問者模式的主要作用是把對元素對象的操作抽象出來封裝到訪問者類中,這樣就

    2024年02月16日
    瀏覽(36)
  • Java設(shè)計模式之結(jié)構(gòu)型-裝飾器模式(UML類圖+案例分析)

    Java設(shè)計模式之結(jié)構(gòu)型-裝飾器模式(UML類圖+案例分析)

    目錄 一、基本概念 二、UML類圖 三、角色設(shè)計 四、代碼實(shí)現(xiàn) 案例一 案例二? 五、總結(jié)? 裝飾器模式是指不必在改變原有的類和不使用繼承的情況下,動態(tài)擴(kuò)展一個對象的功能。 角色 描述 抽象構(gòu)件 是一個接口或者抽象類,定義我們最核心的對象 具體構(gòu)件 抽象構(gòu)件的實(shí)現(xiàn),

    2024年02月11日
    瀏覽(26)
  • Java設(shè)計模式之結(jié)構(gòu)型-享元模式(UML類圖+案例分析)

    Java設(shè)計模式之結(jié)構(gòu)型-享元模式(UML類圖+案例分析)

    目錄 一、基本概念 二、UML類圖 三、角色設(shè)計 四、案例分析 4.1、基本實(shí)現(xiàn) 4.2、游戲角色 五、總結(jié) 享元模式是一種結(jié)構(gòu)型設(shè)計模式,主要用于減少創(chuàng)建大量相似對象所占用的內(nèi)存,它通過共享技術(shù)來有效支持大量細(xì)粒度的對象。 角色 描述 抽象享元角色 定義出對象的外部狀

    2024年02月16日
    瀏覽(27)
  • Java設(shè)計模式之行為型-備忘錄模式(UML類圖+案例分析)

    Java設(shè)計模式之行為型-備忘錄模式(UML類圖+案例分析)

    目錄 一、基礎(chǔ)概念 二、UML類圖 三、角色設(shè)計 四、案例分析 五、總結(jié)? 備忘錄模式是一種行為型設(shè)計模式,它允許保存一個對象的內(nèi)部狀態(tài)到一個備忘錄對象中,這樣就可以在需要的時候恢復(fù)這個對象的狀態(tài)了,同時又不違反封裝性原則。 這個模式的核心就是備忘錄對象,

    2024年02月16日
    瀏覽(24)
  • Java設(shè)計模式之UML類圖

    Java設(shè)計模式之UML類圖

    UML圖有很多種,但是并非必須掌握所有的UML圖,才能完整系統(tǒng)分析和設(shè)計工作。一般說來,在UML圖中,只要掌握類圖、用例圖、時序圖的使用,就能完成大部分的工作。對于程序員來說,最頻繁使用的莫過于類圖。因此,這里我只講解UML類圖。 類圖是面向?qū)ο笙到y(tǒng)建模中最常

    2024年02月03日
    瀏覽(21)
  • Java設(shè)計模式之責(zé)任鏈模式(UML類圖分析+代碼詳解)

    Java設(shè)計模式之責(zé)任鏈模式(UML類圖分析+代碼詳解)

    大家好,我是一名在算法之路上不斷前進(jìn)的小小程序猿!體會算法之美,領(lǐng)悟算法的智慧~ 希望各位博友走過路過可以給我點(diǎn)個免費(fèi)的贊,你們的支持是我不斷前進(jìn)的動力??! 加油吧!未來可期!! 本文將介紹java設(shè)計模式之責(zé)任鏈模式 OA系統(tǒng)采購審批需求 傳統(tǒng)方案解決OA系

    2024年02月06日
    瀏覽(16)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包