建造者模式
Introduction
建造者模式是一种创建型设计模式,它可以隐藏复杂对象的创建过程并将其抽象化,通过子类继承或者重载的方式来动态地创建具有复合属性的对象。这种设计模式将一个复杂的构建过程分解成若干个简单的步骤,从而使得整个构建过程更加灵活、可控,并且易于复用。
需要的组件:
Product:表示需要创建的复杂对象,它包含了多个组件和属性。
AbstractBuilder:创建一个 Product 的抽象 builder,其中定义了创建 Product 的各种组件和属性的方法。
ConcreteBuilder:创建 Product 具体的 builder,实现了 AbstractBuilder 中定义的各种方法,从而可以创建一个特定类型的 Product。
Director:指挥 builder 如何创建一个复杂的 Product,它负责控制建造过程中的顺序和流程,以及对各个组件和属性进行组合和装配。
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
在 .NET Core 中,我们可以看到各种不同的 builder,比如 HostBuilder、ConfigurationBuilder 等。这些 builder 本质上也可以看作是建造者模式的一种实现方式。
在 .NET Core 中,builder 本身就是 Director,它负责控制整个对象的构建过程,并且通过 builder 中定义的各种方法来配置对象的各种属性和组件。最终,builder 会将所有的属性和组件组装起来,创建出一个完整的对象。
以 HostBuilder 为例,我们可以通过以下代码来创建一个 Host 对象:
var host = Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
})
.Build();
在这个例子中,HostBuilder 就是一个 builder,它通过 CreateDefaultBuilder 方法来创建一个默认的 builder 实例,并且通过 ConfigureWebHostDefaults 方法来配置 WebHost 的各种属性和组件,最终通过 Build 方法来创建一个完整的 Host 对象。
类似地,我们还可以通过 ConfigurationBuilder 来创建一个配置对象:
var config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.Build();
在这个例子中,ConfigurationBuilder 就是一个 builder,它通过 SetBasePath 和 AddJsonFile 等方法来配置配置对象的各种属性和组件,最终通过 Build 方法来创建一个完整的配置对象。
总结
建造者模式是一种非常常用的设计模式,它可以帮助我们将一个复杂的对象创建过程分解成若干个简单的步骤,从而使得整个构建过程更加灵活、可控,并且易于复用。在 .NET Core 中,我们可以看到各种不同的 builder,它们本质上也可以看作是建造者模式的一种实现方式