设计模式 ---建造者模式(Builder)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jdhellfire/article/details/78682321

建造者模式:将一个复杂对象的构建过程和表示过程分离。使得同样的构建过程可以创建不同的表示。

它主要是用于一些复杂的对象,这些对象的内部构建间的构造顺序通常是稳定的,但对象内部的构建同时面临着复杂的变化。建造者模式提供了一个通用的接口,接口中定义了产品创建的过程(提供产品的表示),而不同的Builder分别去实现创建过程,使得产品的表示和创建过程分离。Directory用于控制建造的过程/顺序,也用它来隔离用户和建造的过程。
这里写图片描述

C#代码示例:

C#代码示例:
namespace 建造者模式
{

     public class Product
     {
         public ArrayList Part = new ArrayList();
         public void AddProduct(string PartInfo)
         {
              Part.Add(PartInfo);
         }

         public void ShowProduct()
         {
              foreach (object part in Part)
              {
                   Console.WriteLine((string)part);
              }
         }
     }

     public abstract class absBuilder
     {
         public abstract void BuildMainBoard();
         public abstract void BuildMonitor();
         public abstract void BuildGraphCard();
         //And so on
         public abstract Product ReturnProduct();

     }
     public class Lenovo :absBuilder
     {
         private Product _product = new Product();
         //建造PC的实现细节。
         public override void BuildMainBoard()
         {
              _product.AddProduct("Lenovo PC MainBoard");
         }
         public override void BuildMonitor()
         {
              _product.AddProduct("Lenovo PC Monitor");
         }
         public override void BuildGraphCard()
         {
              _product.AddProduct("Lenovo PC GraphCard");

          }
         public override Product ReturnProduct()
         {
              return this._product;
         }
     }
     public class Purchase
     {   
         private absBuilder  PCFactory;
         public Purchase (absBuilder Factory)
         {
              this.PCFactory=Factory;
         }
         public void BuildPc()
         {
              //建造PC的表示过程。
              PCFactory.BuildMainBoard();
              PCFactory.BuildMainBoard();
              PCFactory.BuildGraphCard();
                            }
         public Product GetPc()
         {
              return (PCFactory.ReturnProduct());
         }
     }
     class Class1
     {
         /// <summary>
         /// 应用程序的主入口点。
         /// </summary>
         [STAThread]
         static void Main(string[] args)
         {
              Purchase PcPurchase = new Purchase(new Lenovo());
              PcPurchase.BuildPc();
              Product MyPc = PcPurchase.GetPc();
              MyPc.ShowProduct();

              Console.ReadLine();

         }
     }
}

Purchase 是Director类,负责控制建造过程。absBuilder是Builder类的通用接口负责定义建造中固定存在的流程. Lenovo是一个实际的Builder它实现了absBuilder建造过程。Purchase(Director类)只用关注产品的表示,而具体的建造细节不用关心有具体的Builder类(Lenovo)去实现。体现了面向对象中,分离关注点的思想,以及依赖倒置的原则。

猜你喜欢

转载自blog.csdn.net/jdhellfire/article/details/78682321