定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

 

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;

namespace ConsoleApplication1
{
    class Program
    {

        public class Product
        {
            private string name;

            public string Name
            {
                get { return name; }
                set { name = value; }
            }

            public override string ToString()
            {
                return string.Format("Name: {0}", name);
            }
        }

        public abstract class Builder
        {
            public abstract void SetName(string name);
            public abstract Product GetProduct();
        }

        public class ConcreateBuilder : Builder
        {
            private Product product = new Product();

            public override void SetName(string name)
            {
                product.Name = name;
            }

            public override Product GetProduct()
            {
                return product;
            }
        }

        public class Director
        {
            private Builder builder = new ConcreateBuilder();

            public Product GetAProduct()
            {
                builder.SetName("a");
                return builder.GetProduct();
            }

            public Product GetBProduct()
            {
                builder.SetName("b");
                return builder.GetProduct();
            }
        }

        static void Main(string[] args)
        {
            Director director = new Director();
            Product a = director.GetAProduct();
            Product b = director.GetBProduct();

            Console.WriteLine(a.ToString());
            Console.WriteLine(b.ToString());
        }
    }
}