C#的建造者设计模式(Builder),及Aspnet Core的源代码
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