【设计模式】-建造者模式

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

书面定义

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

个人理解

建造者模式就是把建造的过程给固定了,每个过程的具体部件可以更换,但是步骤不变,就像我们捏饺子,首先擀皮,其次包陷,最后下锅。在这个过程中,擀皮—包陷—下锅,这些步骤是不变的,由指挥者统一指挥,但是擀什么样的皮,包素馅还是肉馅,或者用什么锅来煮饺子,这些部件都是可以更换的。

UML图

在这里插入图片描述

Director指挥者,是构建一个使用Builder接口的对象。Builder是为创建一个Product对象的各个部件指定的抽象接口。ConcreteBuilder是具体建造者,实现Builder接口,构造和配置各个部件。Product是具体产品。

基本代码

Product类,由多个部件组成。

	class Product
    {
        IList<string> parts = new List<string>();
        public void Add(string part)//添加部件产品
        {
            parts.Add(part );
        }
        public void Show()
        {
            Console.WriteLine("\n产品 创建-----");
            foreach (string part in parts )
            {
                Console.WriteLine(part );
            }
        }
    }

Builder类——抽象建造者,确定产品由两个部件PartA和PartB组成,并声明一个得到产品建造后结果的方法GetResult。

abstract class Builder
    {
        public abstract void BuildPartA();
        public abstract void BuildPartB();
        public abstract Product GetResult();

    }

ConCreteBuilder1类——具体建造者类。

class ConcreteBuilder1 :Builder 
    {
        private Product product = new Product();
        public override void BuildPartA()
        {
            product.Add("白色皮肤");
        }

        public override void BuildPartB()
        {
            product.Add("金色头发");
        }

        public override Product GetResult()
        {
            return product;
        }
    }

ConCreteBuilder2类——具体建造者类。

class ConcreteBuilder2:Builder
    {
        private Product product = new Product();
        public override void BuildPartA()
        {
            product.Add("黑色皮肤");
        }

        public override void BuildPartB()
        {
            product.Add("黑色头发");
        }

        public override Product GetResult()
        {
            return product;
        }
    }

Director——指挥者类。

class Director
    {
        public void Construct(Builder builder)//指挥建造的过程
        {
            builder.BuildPartA();//先建造A
            builder.BuildPartB();//后建造B
        }
    }

客户端代码

class Program
    {
        static void Main(string[] args)
        {
            Director director = new Director();
            Builder b1 = new ConcreteBuilder1();
            Builder b2 = new ConcreteBuilder2();

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

            director.Construct(b2 );
            Product p2 = b2.GetResult();
            p2.Show ();
            Console.Read();
        }
    }

结果

在这里插入图片描述

总结

船到桥头自然直,但前提是,船要一直向前滑。

猜你喜欢

转载自blog.csdn.net/suzan_bingtong/article/details/82823916