码迷,mamicode.com
首页 > 其他好文 > 详细

5.建造者模式(Builder Pattern)

时间:2015-07-08 12:41:28      阅读:80      评论:0      收藏:0      [点我收藏+]

标签:

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;
            }
        }
    }
}

 

5.建造者模式(Builder Pattern)

标签:

原文地址:http://www.cnblogs.com/lgxlsm/p/4629623.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!