using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Builder { /*建造者模式:将一个复杂对象的构建与表示分离,使用同样的构建创建不同的表示*/ //产品类,要生产的产品 class Product { List<string> Parts = new List<string>(); public void Add(string Part) { Parts.Add(Part); } public void Show() { Console.WriteLine("该产品由以下部件组成"); foreach (string part in Parts) { Console.WriteLine(part); } } } //创建一个Product对象的各个部件指定抽象的接口 abstract class Builder { public abstract void ConcreateBuilderA(); public abstract void ConcreateBuilderB(); public abstract Product GetResults(); } //生产部件A,部件B class Builder1:Builder { Product product = new Product(); public override void ConcreateBuilderA() { product.Add("部件A"); } public override void ConcreateBuilderB() { product.Add("部件B"); } public override Product GetResults() { return product; } } //生产部件X,部件Y class Builder2 : Builder { Product product = new Product(); public override void ConcreateBuilderA() { product.Add("部件X"); } public override void ConcreateBuilderB() { product.Add("部件Y"); } public override Product GetResults() { return product; } } //指挥类,告诉客户怎么创建产品 class Director { public void ConcreateProduct(Builder builder) { builder.ConcreateBuilderA(); builder.ConcreateBuilderB(); } } class Client { static void Main() { Director director = new Director(); Builder1 B1 = new Builder1(); Builder2 B2 = new Builder2(); director.ConcreateProduct(B1); Product P1 = B1.GetResults(); P1.Show(); } } }