5.建造者模式(Builder Pattern)

using System;

using System.Collections.Generic;



namespace ConsoleApplication4

{

    class Program

    {

        /// <summary>

        /// 以组装电脑为例子

        /// 每台电脑的组成过程都是一致的,但是使用同样的构建过程可以创建不同的表示(即可以组装成不一样的电脑,配置不一样)

        /// 组装电脑的这个场景就可以应用建造者模式来设计

        /// </summary>

        /// <param name="args"></param>

        static void Main(string[] args)

        {

            // 客户找到电脑城老板说要买电脑,这里要装两台电脑



            // 创建指挥者和构造者

            Director director = new Director();

            Builder b1 = new ConcreteBuilder1();

            Builder b2 = new ConcreteBuilder2();



            // 老板叫员工去组装第一台电脑

            director.Construct(b1);



            // 组装完,组装人员搬来组装好的电脑

            Computer computer1 = b1.GetComputer();

            computer1.Show();





            // 老板叫员工去组装第二台电脑

            director.Construct(b2);

            Computer computer2 = b2.GetComputer();

            computer2.Show();



            Console.Read();

        }



        /// <summary>

        /// 建造者模式中的指挥者

        /// </summary>

        public class Director

        {

            // 组装电脑

            public void Construct(Builder builder)

            {

                builder.BuildPartCPU();

                builder.BuildPartMainBoard();

            }

        }



        /// <summary>

        /// 客户

        /// </summary>

        public class Computer

        {

            /// <summary>

            /// 电脑部件

            /// </summary>

            private IList<string> parts = new List<string>();



            /// <summary>

            /// 添加部件

            /// </summary>

            /// <param name="part"></param>

            public void Add(string part)

            {

                parts.Add(part);

            }



            public void Show()

            {

                Console.WriteLine("电脑开始在组装.......");

                foreach (var p in parts)

                {

                    Console.WriteLine("添加"+p+"组件  ");

                }

                Console.WriteLine("电脑组装完成");

            }

        }



        /// <summary>

        /// 抽象建造者,这个场景下为 "组装人" ,这里也可以定义为接口

        /// </summary>

        public abstract class Builder

        {

            // 装CPU

            public abstract void BuildPartCPU();



            // 装主板

            public abstract void BuildPartMainBoard();



            // 当然还有装硬盘,电源等组件,这里省略



            // 获得组装好的电脑

            public abstract Computer GetComputer();

        }



        /// <summary>

        /// 具体创建者,具体的某个人为具体创建者,例如:装机小王啊

        /// </summary>

        public class ConcreteBuilder1 : Builder

        {

            Computer computer = new Computer();

            public override void BuildPartCPU()

            {

                computer.Add("CPU1");

            }



            public override void BuildPartMainBoard()

            {

                computer.Add("Main board1");

            }



            public override Computer GetComputer()

            {

                return computer;

            }

        }



        /// <summary>

        /// 具体创建者,具体的某个人为具体创建者,例如:装机小李啊

        /// 又装另一台电脑了

        /// </summary>

        public class ConcreteBuilder2 : Builder

        {

            Computer computer = new Computer();

            public override void BuildPartCPU()

            {

                computer.Add("CPU2");

            }



            public override void BuildPartMainBoard()

            {

                computer.Add("Main board2");

            }



            public override Computer GetComputer()

            {

                return computer;

            }

        }

    }

}

 

你可能感兴趣的:(Pattern)