亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么理解Java設計模式的建造者模式

發布時間:2021-11-08 09:01:52 來源:億速云 閱讀:126 作者:iii 欄目:開發技術

本篇內容介紹了“怎么理解Java設計模式的建造者模式”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

一、什么是建造者模式

建造者模式也稱生成器模式 定義:將一個復雜對象的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示(依賴倒轉)

怎么理解Java設計模式的建造者模式

產品類:一般是一個較為復雜的對象,也就是說創建對象的過程比較復雜,一般會有比較多的代碼量。在本類圖中,產品類是一個具體的類,而非抽象類。實際編程中,產品類可以是由一個抽象類與它的不同實現組成,也可以是由多個抽象類與他們的實現組成。

抽象建造者:引入抽象建造者的目的,是為了將建造的具體過程交與它的子類來實現。這樣更容易擴展。一般至少會有兩個抽象方法,一個用來建造產品,一個是用來返回產品。

建造者:實現抽象類的所有未實現的方法,具體來說一般是兩項任務:組建產品;返回組建好的產品。

指揮類:負責調用適當的建造者來組建產品,指揮類一般不與產品類發生依賴關系,與指揮類直接交互的是建造者類。一般來說,指揮類被用來封裝程序中易變的部分。

二、建造者模式的應用場景

1.創建復雜對象的算法獨立于組成對象的部件

2.同一個創建過程需要有不同的內部表象的產品對象

例子:建房子,不管建什么房子,它們都離不開地基、柱子、層面和墻體這些組成部分,建筑工人就是把這些組成部分一個個建起來,最后連成一體建出一棟棟樓房。

三、建造者模式的優缺點

優點

1.客戶端不必知道產品內部組成的細節,將產品本身與產品的創建過程解耦,使得相同的創建過程可以創建不同的產品對象。

2.每一個具體建造者都獨立,因此可以方便地替換具體建造者或增加新的具體建造者, 用戶使用不同的具體建造者即可得到不同的產品對象 。

3.可以更加精細地控制產品的創建過程 。將復雜產品的創建步驟分解在不同的方法中,使得創建過程更加清晰,也更方便使用程序來控制創建過程。

4.增加新的具體建造者無須修改原有類庫的代碼,指揮者類針對抽象建造者類編程,系統擴展方便,符合“開閉”。

缺點

1.當建造者過多時,會產生很多類,難以維護。

2.建造者模式所創建的產品一般具有較多的共同點,其組成部分相似,若產品之間的差異性很大,則不適合使用該模式,因此其使用范圍受到一定限制。

3.若產品的內部變化復雜,可能會導致需要定義很多具體建造者類來實現這種變化,導致系統變得很龐大。

四、工廠模式和建造者模式的對比

工廠模式用于處理 如何獲取實例對象 問題,建造者模式用于處理如何建造實例對象 問題

建造者模式與工廠模式是極為相似的,總體上,建造者模式僅僅只比工廠模式多了一個“指揮類”的角色。在建造者模式的類圖中,假如把這個指揮類看做是最終調用的客戶端,那么剩余的部分就可以看作是一個簡單的工廠模式了。

與工廠模式相比,建造者模式一般用來創建更為復雜的對象,因為對象的創建過程更為復雜,因此將對象的創建過程獨立出來組成一個新的類——指揮類。

也就是說,工廠模式是將對象的全部創建過程封裝在工廠類中,由工廠類向客戶端提供最終的產品;而建造者模式中,建造者類一般只提供產品類中各個組件的建造,而將具體建造過程交付給指揮類。由指揮類負責將各個組件按照特定的規則組建為產品,然后將組建好的產品交付給客戶端。

五、建造者模式的實現

Product類---產品類,由多個部件組成

//Product類,由多個部件組成
public class Product
{
    List<string> parts = new List<string>();
    //添加產品部件
    public void Add(string part)
    {
        parts.Add(part);
    }
     public void show()
    {
        Console.WriteLine("\n  創建產品");
        foreach (var item in parts)
        {
            Console.WriteLine("item");
        }
    }
}

Builder類---抽象建造者類,確定產品由兩個部件PartA和PartB組成,并聲明一個得到產品建造后結果的方法GetResult

abstract class Builder
{
    public abstract void BuilderPartA();
    public abstract void BuilderPartB();
    public abstract Product GetResult();
}

具體建造者類

//ConcreteBuilder1類---具體建造者類
class ConcreteBuilder1 : Builder
{
    private Product product = new Product();
    //建造具體的兩個部件
    public override void BuilderPartA()
    {
        product.Add("部件A");
    }
     public override void BuilderPartB()
    {
        product.Add("部件B");
    }
     public override Product GetResult()
    {
        return product;
    }
}
//ConcreteBuilder2類---具體建造者類
class ConcreteBuilder2 : Builder
{
    private Product product = new Product();
    //建造具體的兩個部件
    public override void BuilderPartA()
    {
        product.Add("部件X");
    }
     public override void BuilderPartB()
    {
        product.Add("部件Y");
    }
     public override Product GetResult()
    {
        return product;
    }
}

Director類---指揮者類

class Director
{
    public void Construct(Builder builder)
    {
        //用來指揮建造過程
        builder.BuilderPartA();
        builder.BuilderPartB();
    }
}

客戶端代碼---客戶不需知道具體的建造過程

static void Main(string[] args)
{
    Director director = new Director();
    Builder b1 = new ConcreteBuilder1();
    Builder b2 = new ConcreteBuilder2();
     //指揮者用ConcreteBuilder1方法建造產品
    director.Construct(b1);
    Product p1 = b1.GetResult();
    p1.show();
     //指揮者用ConcreteBuilder2方法建造產品
    director.Construct(b2);
    Product p2 = b2.GetResult();
    p2.show();
     Console.Read();
}

“怎么理解Java設計模式的建造者模式”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

游戏| 宁化县| 宝兴县| 崇礼县| 突泉县| 福清市| 泽州县| 岳阳市| 诏安县| 宁河县| 日照市| 攀枝花市| 郓城县| 理塘县| 凌源市| 冷水江市| 玉龙| 涡阳县| 肇庆市| 砚山县| 辰溪县| 麻城市| 上杭县| 郑州市| 新余市| 关岭| 汝城县| 卢龙县| 通海县| 罗定市| 保亭| 光泽县| 正安县| 十堰市| 淳化县| 萝北县| 什邡市| 清水县| 汽车| 乐清市| 阳新县|