建筑者模式

建筑者模式

  • 1.管理者或叫指导者Director(并调具体建筑者去创建产品)
  • 2.建筑者Buidler(抽象类,抽象了生成产品结构化过程)
  • 3.具体建筑者ConcreteBuilder(具体生成产品,实现建筑者)
  • 4.产品Product(产品内部各个部分的构成经常变化)

描述在软件系统中,经常面临着复杂的对象的创建工作,它通常由各个部分子对象经过一定的算法构成。这个复杂的对象的各个部分经常面临着剧烈的变化,而将它们组合在一起的算法相对稳定。如何应对这种变化?《 建筑者模式》:把复杂对象(Product)内部各个剧烈变化的部分封装(Builder)“隔绝出来”,保持系统“稳定构造算法”不随着需求的变化而变化。
实现:把复杂的构造和表示相分离,同样的构造过程可以创建不同的表示。

类图

流程图

实际的例子:

      模拟小米手机的生成过程:小米手机分为高端的小米手机和低端的红米手机,生产手机的过程(屏幕+主版+电池等)是相同,所用的材料不相同。

所有生成的产品

 /// <summary>
    /// 手机类(产品)
    /// </summary>
    public class Mobile
    {
        readonly Dictionary<string,string> _mobel=new Dictionary<string, string>();

        public void Add(string partName, string partVal)
        {
            _mobel.Add(partName, partVal);
        }

        public void Show()
        {
            Console.WriteLine("这个一台生成完毕的手机,下面是手机的信息");
            var mobileParts = _mobel.GetEnumerator();
            Console.WriteLine(mobileParts.Current.Key+":"+mobileParts.Current.Value);
            while (mobileParts.MoveNext())
            {
                Console.WriteLine(mobileParts.Current.Key + ":" + mobileParts.Current.Value);
            }
        }
    }
View Code

建筑者Builer

   /// <summary>
    /// 手机建造者(抽象的建造者)
    /// </summary>
    public abstract class Builder
    {
        /// <summary>
        /// 生产第一部分
        /// </summary>
        public abstract void PartA();
        /// <summary>
        /// 生产第二个部分
        /// </summary>
        public abstract void PartB();
        /// <summary>
        /// 生产第三个部分
        /// </summary>
        public abstract void PartC();

        /// <summary>
        /// 返回产品
        /// </summary>
        /// <returns></returns>
        public abstract Mobile GetProduct();

    }
View Code

具体建造者

  /// <summary>
    /// 具体建造者(红米手机具体建造者)
    /// </summary>
  public  class ConcreteRedMiBuilder:Builder
    {
      readonly Mobile _mobile=new Mobile();
        public override void PartA()
        {
            _mobile.Add("屏幕","720p");
        }

        public override void PartB()
        {
            _mobile.Add("主板", "红米特供");
        }

        public override void PartC()
        {
            _mobile.Add("电磁", "2500m");
        }

        public override Mobile GetProduct()
        {
            return _mobile;
        }
    }
View Code
/// <summary>
    /// 小米手机的具体工厂
    /// </summary>
  public  class ConcreteSmillMiBuilder:Builder
    {
      private Mobile _mobile=new Mobile();
        public override void PartA()
        {
            _mobile.Add("屏幕","1080p");
        }

        public override void PartB()
        {
            _mobile.Add("主板", "小米特供");
        }

        public override void PartC()
        {
            _mobile.Add("电池", "3100m");
        }

        public override Mobile GetProduct()
        {
            return _mobile;
        }
    }
View Code

管理者

/// <summary>
    /// 管理者
    /// </summary>
    public class Director
    {
        /// <summary>
        /// 执行手机生产的各个部分
        /// </summary>
        /// <param name="builder"></param>
        public void Construct(Builder builder)
        {
            builder.PartA();
            builder.PartB();
            builder.PartC();
        }
    }
View Code

最后是客户端调用代码

    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("请输入产品的编码
1红米
2小米");
            string no =Console.ReadLine();
            string builderName = ConfigurationSettings.AppSettings["No" + no];
            Builder.Builder instance =
                (Builder.Builder)Assembly.Load("Builder").CreateInstance("Builder." + builderName);
            Director director=new Director();
            director.Construct(instance);
            Mobile mobile = instance.GetProduct();

            mobile.Show();
            Console.ReadLine();

        }
    }
View Code

项目的代码:建造者模式.zip

原文地址:https://www.cnblogs.com/Blogs-Wang/p/6412148.html