CSharp设计模式读书笔记(6):建造者模式(学习难度:★★★★☆,使用频率:★★☆☆☆)

建造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

模式角色与模式:

建造者模式可以将一个产品的内部表象与产品的生产过程分割开来,从而可以是一个建造过程生成具有不同的内部表象的产品对象。

示例代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace CSharp.DesignPattern.BuilderPattern
{
    class Program
    {
        static void Main(string[] args)
        {
            Director director = new Director();

            IBuilder b1 = new ConcreteBuilder1();
            IBuilder b2 = new ConcreteBuilder2();

            Product p1;
            Product p2;

            director.Construct(b1);
            p1 = b1.GetResult();

            director.Construct(b2);
            p2 = b2.GetResult();

            p1.Display();
            p2.Display();

            Console.ReadLine();
        }
    }

    // 指挥者
    class Director
    {
        public void Construct(IBuilder builder)
        {
            builder.BuildPartA();
            builder.BuildPartB();
        }
    }
    
    // 抽象建造者 
    interface IBuilder
    {
        void BuildPartA();
        void BuildPartB();
        Product GetResult();
    }

    // 具体建造者
    class ConcreteBuilder1 : IBuilder
    {
        private Product product;

        public void BuildPartA()
        {
            product = new Product();
            product.Add("PartA");
        }

        public void BuildPartB()
        {
            product.Add("PartB");
        }

        public Product GetResult()
        {
            return product;
        }
    }

    // 具体建造者
    class ConcreteBuilder2 : IBuilder
    {
        private Product product;

        public void BuildPartA()
        {
            product = new Product();
            product.Add("PartX");
        }

        public void BuildPartB()
        {
            product.Add("PartY");
        }

        public Product GetResult()
        {
            return product;
        }
    }

    class Product
    {
        List<String> parts = new List<String>();

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

        public void Display()
        {
            Console.WriteLine("Display result:");
            foreach (String obj in parts)
            {
                Console.WriteLine(obj);
            }
        }
    }
}
 
原文地址:https://www.cnblogs.com/thlzhf/p/3993125.html