>>回傳《C#常用設計模式》
- 1. 簡介
- 2. 示例
- 2.1. Dotnet框架中的示例
- 3. 注意要點
1. 簡介
生成器模式把物件的創建步驟抽象成生成器,并且可以通過指導類(director)對所有生成步驟的先后順序進行控制,客戶端使用指導類并傳入相應的生成器,通過指導類的介面便可以得到相應的物件,
適應于構建部分穩定不變,構建內容變動較頻繁,將一個復雜物件的構建與其表示相分離,使得同樣的構建程序可以創建不同的表示,
時序圖:

2. 示例
//使用的客戶端類
public class Client
{
public void Main()
{
//這里通過配置和反射 Assembly.Load Activator.CreateInstance(Type) 實作
House house= GameManager.CreateHouse(new RomainHouseBuilder());
}
}
//相當于director
public class GameManager
{
//該構建程序是相對穩定才能用此模式
public static House CreateHouse(Builder builder)
{
builder.BuildWindows();
builder.BuildWindows();
builder.BuildDoor();
builder.BuildWall();
return builder.GetHouse();
}
}
//抽象類的實作,當變動時將RomainHouseBuilder和RomainHouse換成新的
public class RomainHouse:House
{ }
public class RomainHouseBuilder : Builder
{
public override void BuildWindows() { }
public override void BuildDoor() { }
public override void BuildWall() { }
}
//為了適應變化定義的抽象類
public abstract class House
{ }
public abstract class Builder
{
public abstract void BuildWindows();
public abstract void BuildDoor();
public abstract void BuildWall();
public abstract House GetHouse();
}
2.1. Dotnet框架中的示例
HostBuilder通用主機的設計使用的就是生成器模式,
public class Program
{
public static void Main(string[] args)
{
//創建HostBuilder
CreateHostBuilder(args)
//構建成Host物件
.Build()
//啟動Host物件
.Run();
}
static IHostBuilder CreateHostBuilder(string[] args) =>
//創建Builder
Host.CreateDefaultBuilder(args)
//配置設定
.ConfigureAppConfiguration((hostingContext, configuration) =>
{
configuration.Sources.Clear();
IHostEnvironment env = hostingContext.HostingEnvironment;
configuration
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", true, true);
})
//DI設定
.ConfigureServices((hostContext, services) =>
{
services.AddHostedService<Worker>();
});
//日志設定
.ConfigureLogging(logging =>
{
logging.ClearProviders();
logging.AddConsole();
});
}
- 呼叫
CreateDefaultBuilder()方法來創建和配置構建器物件, - 呼叫
Build()創建一個IHost實體, - 在主機物件上呼叫
Run或RunAsync方法啟動主機,
3. 注意要點
- Builder模式主要用于"分步驟構建一個復雜的象”,在這其中“分步驟”是一個穩定的演算法,而復雜物件的各個部分則經常變化,
- 變化點在哪里,封裝哪里 —— Builder模式主要在于應對“復雜物件各個部分”的頻繁需求變動,缺點在于難以應對“分步驟構建演算法”的需求變動,
- Abstract Factory模式解決“系列物件”的需求變化,Builder模式解決"物件部分”的需求變化,Builder模式通常和Composite(組合模式)組合使用,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/259668.html
標籤:設計模式
上一篇:什么是CDN?
下一篇:Kubernetes應用場景
