設(shè)計(jì)模式之建造者模式
Intro 簡介
建造者模式: 建造者模式隱藏了復(fù)雜對(duì)象的創(chuàng)建過程刃跛,它把復(fù)雜對(duì)象的創(chuàng)建過程加以抽象嵌器,通過子類繼承或者重載的方式割粮,動(dòng)態(tài)的創(chuàng)建具有復(fù)合屬性的對(duì)象斟珊。
需要的組件:
- Product 最終要構(gòu)建的產(chǎn)品
- AbstractBuilder 創(chuàng)建一個(gè) Product 的抽象 builder
- ConcreteBuilder1/ConcreteBuilder2 創(chuàng)建 Product 具體的 builder
- Director 指揮 builder 如何創(chuàng)建一個(gè)復(fù)雜的 Product(根據(jù)需要可以沒有)
主要解決:
主要解決在軟件系統(tǒng)中鸳粉,有時(shí)候面臨著"一個(gè)復(fù)雜對(duì)象"的創(chuàng)建工作,其通常由各個(gè)部分的子對(duì)象用一定的算法構(gòu)成集畅;由于需求的變化近弟,這個(gè)復(fù)雜對(duì)象的各個(gè)部分經(jīng)常面臨著劇烈的變化,但是將它們組合在一起的算法卻相對(duì)穩(wěn)定挺智。
使用場景
當(dāng)我們要?jiǎng)?chuàng)建的對(duì)象比較復(fù)雜祷愉,各種參數(shù)配置很多的時(shí)候可以考慮使用建造者模式,將復(fù)雜的構(gòu)建過程封裝在構(gòu)建者中
Sample
var director = new Director();
Builder builder1 = new ConcreteBuilder1(), builder2 = new ConcreteBuilder2();
director.Construct(builder1);
director.Construct(builder2);
var product2 = builder1.GetResult();
var product2 = builder2.GetResult();
.net core 中的各種 builder (HostBuilder
/ConfigurationBuilder
/...) 我覺得也是屬于建造者模式的,只是 Builder 本身就是 Director二鳄,
通過 builder 來實(shí)現(xiàn)對(duì)象的各種參數(shù)配置構(gòu)建最終的目標(biāo)對(duì)象 (Host
/Configuration
/...)