设计模式学习笔记-建造者模式

一、概述

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

二、模式中的角色

      Builder:为创建一个Product对象的各个部件指定抽象接口;

      ConcreteBuilder:实现Builder的接口以构造和装配该产品的各个部件;定义并明确它所创建的表示;提供一个检索产品的接口;

      Director:构造一个使用Builder接口的对象;

      Product:表示被构造的复杂对象,ConcreteBuilder创建该产品的内部表示并定义它的装配过程;包含定义组成部件的类,包括将这些部件装配成最终产品的接口;

三、UML类图

 

四、代码实现

    /// <summary>
    /// 产品类
    /// </summary>
    public class Product
    {
        List<string> parts = new List<string>();

        public void Add(string part)
        {
            parts.Add(part);
        }

        public void Show()
        {
            Console.WriteLine("\n 产品创建------");
            foreach (var item in parts)
            {
                Console.WriteLine(item);
            }
        }
    }

    /// <summary>
    /// 抽象建造者类
    /// </summary>
    public abstract class Builder
    {
        public abstract void BuilderPart1();

        public abstract void BuilderPart2();

        public abstract Product GetResult();
    }

    /// <summary>
    /// 具体建造者类
    /// </summary>
    public class ConcreteBuilder : Builder
    {
        private Product product = new Product();

        /// <summary>
        /// 部件1
        /// </summary>
        public override void BuilderPart1()
        {
            product.Add("部件1");
        }

        /// <summary>
        /// 部件2
        /// </summary>
        public override void BuilderPart2()
        {
            product.Add("部件2");
        }

        /// <summary>
        /// 输出结果
        /// </summary>
        /// <returns></returns>
        public override Product GetResult()
        {
            return product;
        }
    }


    /// <summary>
    /// 指挥者类
    /// </summary>
    public class Director
    {
        /// <summary>
        /// 用来指挥建造过程
        /// </summary>
        /// <param name="builder"></param>
        public void Construct(Builder builder)
        {
            builder.BuilderPart1();
            builder.BuilderPart2();
        }
    }


            #region 建造者模式
            Director director = new Director();
            Builder builder1 = new ConcreteBuilder();

            director.Construct(builder1);
            Product product1 = builder1.GetResult();
            product1.Show();

            #endregion

5、应用场景

     5.1:当创建复杂对象的算法应该独立于该对象的组成部分以及它们的转配方式时;

     5.2:当构造过程必须允许被构造的对象有不同的表示时;

 

参考书籍《设计模式-可复用面向对象软件的基础》

 

posted @ 2017-04-04 23:12  Rich.W  阅读(184)  评论(0编辑  收藏  举报