一、创建型
1,AbstractFactory(抽象工厂,对象创建型)
2,Builder(建造者,对象创建型)
一、创建型
1,AbstractFactory(抽象工厂,对象创建型)
2,Builder(建造者,对象创建型)
意图:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示
使用场景:当需要创建复杂对象并且需要控制对象的构造过程时,使用 Builder 模式可以提供一种清晰、简洁的解决方案
结构:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace _9_建造者模式 { class Program { static void Main(string[] args) { Builder bui = new ConcreteBuilder(); Director dir = new Director(); dir.Construct(bui); bui.GetResult().GetProduct(); Console.ReadLine(); } } //具体产品 public class Product { private List<string> strList = new List<string>(); public void Add(string p) { strList.Add(p); } public void GetProduct() { foreach (var list in strList) { Console.WriteLine(list); } } } //抽象建造者 public abstract class Builder { public abstract void BuilderPartA(); public abstract void BuilderPartB(); public abstract Product GetResult(); } //具体建造者 public class ConcreteBuilder : Builder { private Product pro = new Product(); public override void BuilderPartA() { pro.Add("部件1"); } public override void BuilderPartB() { pro.Add("部件2"); } public override Product GetResult() { return pro; } } //指挥者 public class Director { public void Construct(Builder bui) { bui.BuilderPartA(); bui.BuilderPartB(); } } }
使用案例:在asp.net core框架中的应用:
using Microsoft.AspNetCore; using Microsoft.AspNetCore.Hosting; public class Program { public static void Main(string[] args) { CreateWebHostBuilder(args).Build().Run(); } public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup<Startup>(); }