建造者模式:可以将一个产品的内部表现与产品的生成过程分割开来。从而可以使一个建造过程具有不同的内部表现的产品对象。如果我们用了建造者模式,那么用户就只需指定需要建造的类型就可以得到它们,而具体建造的过程和细节就不需要知道了

namespace 建造者模式
{
    class Program
    {
        static void Main(string[] args)
        {
            //创建指挥者
            Director director = new Director();
            //创建部件AB类
            Builder b1 = new ConcreteBuilder1();
            //创建部件XY类
            Builder b2 = new ConcreteBuilder2();
            //增加AB部件
            director.Construct(b1);
            Product p1 = b1.GetResult();
            //进行展示
            p1.Show();
            //增加XY部件
            director.Construct(b2);
            Product p2 = b2.GetResult();
            //进行展示
            p2.Show();

            Console.Read();
        }
    }
    /// <summary>
    /// 指挥者 
    /// </summary>
    class Director
    {
        /// <summary>
        /// 用来指挥建造过程   
        /// </summary>
        /// <param name="builder"></param>
        public void Construct(Builder builder)
        {
            //建造AB部件
            builder.BuildPartA();
            //建造XY部件
            builder.BuildPartB();
        }
    }
    /// <summary>
    /// 抽象建造者
    /// </summary>
    abstract class Builder
    {
        public abstract void BuildPartA();
        public abstract void BuildPartB();
        public abstract Product GetResult();
    }
    /// <summary>
    /// 具体建造类1
    /// </summary>
    class ConcreteBuilder1 : Builder
    {
        private Product product = new Product();

        public override void BuildPartA()
        {
            product.Add("部件A");
        }

        public override void BuildPartB()
        {
            product.Add("部件B");
        }

        public override Product GetResult()
        {
            return product;
        }
    }
    /// <summary>
    /// 具体建造类2
    /// </summary>
    class ConcreteBuilder2 : Builder
    {
        private Product product = new Product();
        public override void BuildPartA()
        {
            product.Add("部件X");
        }

        public override void BuildPartB()
        {
            product.Add("部件Y");
        }

        public override Product GetResult()
        {
            return product;
        }
    }
    /// <summary>
    /// 产品类
    /// </summary>
    class Product
    {
        IList<string> parts = new List<string>();
        //增加产品部件
        public void Add(string part)
        {
            parts.Add(part);
        }
        //展示产品
        public void Show()
        {
            Console.WriteLine("\n产品 创建 ----");
            //列出产品所有的部件
            foreach (string part in parts)
            {
                Console.WriteLine(part);
            }
        }
    }


}

  

posted on 2018-01-31 16:58  高兴happy  阅读(126)  评论(0编辑  收藏  举报