设计模式之—建造者模式<Builder Pattern>

建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的构建构成可以创建不同的表示。即将建造代码宇表示代码分离

以构建产品为例:

产品类(Product)

namespace Builder_Pattern.CLASS
{
    class Product
    {
        List<string> parts = new List<string>();
        public void Add(string part)
        {
            parts.Add(part);
        }

        public void Show()
        {
            Console.WriteLine("创建产品----------");
            foreach (string part in parts)
            {
                Console.WriteLine(part);
            }
        }
    }
}
View Code

抽象建造类(Builder)

namespace Builder_Pattern.CLASS
{
    abstract class Builder
    {
        public abstract void BuildPartA();
        public abstract void BuildPartB();
        public abstract Product GetREsult();
    }
}
View Code

具体建造类1(ConCreateBuilder1):继承于抽象建造类(Builder)

namespace Builder_Pattern.CLASS
{
    class ConCreateBuilder1:Builder
    {
        private Product product = new Product();
        public override void BuildPartA()
        {
            product.Add("部件A");
        }
        public override void BuildPartB()
        {
            product.Add("部件B");
        }
        public override Product GetREsult()
        {
            return product;
        }
    }
}
View Code

具体建造类2(ConCreateBuilder1):继承于抽象建造类(Builder)

namespace Builder_Pattern.CLASS
{
    class ConCreateBuilder2:Builder
    {
        public Product product = new Product();
        public override void BuildPartA()
        {
            product.Add("部件X");
        }
        public override void BuildPartB()
        {
            product.Add("部件Y");
        }
        public override Product GetREsult()
        {
            return product;
        }
    }
}
View Code

指挥者类(Director)

namespace Builder_Pattern.CLASS
{
    class Director
    {
        public void ConCreateBuild(Builder builder)
        {
            builder.BuildPartA();
            builder.BuildPartB();
        }
    }
}
View Code

测试类(TestMain)

namespace Builder_Pattern
{
    class TestMain
    {
        static void Main(string[] args)
        {
            Director dir = new Director();
            Builder b1 = new ConCreateBuilder1();
            Builder b2 = new ConCreateBuilder2();

            dir.ConCreateBuild(b1);
            Product product = b1.GetREsult();
            product.Show();

            dir.ConCreateBuild(b2);
            Product product1 = b2.GetREsult();
            product1.Show();

            Console.ReadLine();
        }
    }
}
View Code

测试结果

要么忍,要么狠,要么滚!
原文地址:https://www.cnblogs.com/zxd543/p/3246731.html