Aspnet Core 代碼無處不是 Builder 模式,舉例:配置建造 IConfigurationBuilder、通用主機 IHostBuilder、 配置中間件的:IApplicationBuilder等; 到處是 內置委托 Action<T1,...> 作為 函數的參數。
Builder 建造者模式屬於大類 “創建型 Create” 之一,還包括:單例模式、工廠模式、抽象工廠模式、原型模式。
A、單例模式 相對簡單,確保一個類只有一個實例,並提供對該實例的全局訪問。重點是保證多線程獲取的實例唯一。
B、簡單工廠/工廠模式 參考 《C#設計模式(1)——簡單工廠模式》 https://www.cnblogs.com/wyy1234/p/9978389.html
------------------------------------------------------------------------------------------------------
0、 參考一文《C#方法作參數——關於Action和Func的使用》 https://blog.csdn.net/wf824284257/article/details/83661843
------------------------------------------------------------------------------------------------------
注意:Builder 模式的具體實例 XXBuiler ,最好通過 “依賴注入”獲取,解耦依賴。
1、《設計模式之總體介紹》 https://www.cnblogs.com/edison0621/p/10020447.html
2、《C#中的Builder模式》 https://blog.csdn.net/deatharthas/article/details/87892079
3、《C#中的Builder模式》 https://blog.csdn.net/v2810769/article/details/77823555
4、《C#設計模式系列:建造者模式(Builder)》 https://www.cnblogs.com/libingql/p/3633527.html
5、《C#設計模式之四建造者模式(Builder Pattern)【創建型】》 https://www.cnblogs.com/PatrickLiu/p/7614630.html
匯總各文章的介紹小結如下: Builder 模式 涉及 抽象接口或類 IBuilder ,實現類 XXConcreteBuilder,指導者 Director (組裝類) ,產品類Product(被建造類)。

當然核心是:抽象接口或類 IBuilder ,實現類 XXConcreteBuilder。 產品類Product 的實例的部件(屬性)是被 XXConcreteBuilder 的 部件方法具體構造的,並有內置了一個 Product 實例,具體化其部件屬性,最后通過 Build(或類似方法 GetProduct等),輸出相應 XXConcreteBuilder 建造的產品。
Director 類的作用,是按 XXConcreteBuilder 中各方法的順序建造部件,然后組裝,所以也非是必須的。可以將其功能交給使用者,這樣就是 DIY,自行組裝產品了。ASPNet Core 中 ”Builder 模式“ 大都是這種自定義模式!!!
Product 其實是一個 基本類,不同的 實現類 XXConcreteBuilder 建造的產品Product ,部件大都是不同的,只是建造(組裝)過程相同,請注意。
----------------------------------------------------------------------------------------------------
示例 IConfigurationBuilder 及其關聯對象關聯圖(引用:配置[3]: 配置模型詳解 https://mp.weixin.qq.com/s?__biz=MzIwOTM1MjgzMA==&mid=2247484277&idx=1&sn=5a630553b6512ceb43457763c7ececa8&chksm=97746264a003eb727ec8c5715dece437050380f5090bde096804ded35c223e0264f625355b5a&token=1970862794&lang=zh_CN#rd )
說明: IConfigurationRoot 還有屬性 Providers 代表配置源獲取數據的 IConfigurationProvider 。在圖中沒有表示 。

IConfigurationBuilder
