面向对象编程思想-建造者模式

一、引言

父母希望孩子们受到良好的教育,但孩子的培养是很复杂的,从认字,写字,颂词,到语数外理化生音体美的培养等等,如果让父母一个个这样培养孩子是很不容易的,这个时候就出现了学校,学校封装了孩子每一步的培养要做的事情,父母只需要把孩子送到学校,学校负责把培养好的孩子交换给父母。啊。。。这个例子就做抛砖引玉了,在程序设计中,同样存在这样的设计思想,下面介绍今天我们要学习的建造者模式

二、建造者模式

定义:将一个复杂对象的创建与它的表示分离,使得同样的构建过程创建出不同的表示。在这个例子中,家长和学校是直接联系的,学校指挥老师把学生一步步的培养成才,真正给学生添加技能的是老师。下面通过一个例子帮助我们理解建造者模式

 //充当学生类
    class Product
    {
        //定义培养学生的步骤集合
        IList<string> lstParts = new List<string>();
        public void Add(string part)
        {
            lstParts.Add(part);
        }
        //展示学生培养过程
        public void Show()
        {
            Console.WriteLine("针对不同的学生因材施教开始。。。。");
            foreach (string part in lstParts)
            {
                Console.WriteLine(part);
            }
            Console.WriteLine("针对不同的学生因材施教完成。。。。");
        }
    }
    //充当老师的基类 每个学生的培养都会经历从基础到高级的步骤  
    abstract class BaseBuilder
    {
        public abstract void BuildPartLower();

        public abstract void BuildPartHigher();
        //获得培养好的学生
        public abstract Product GetResult();
    }
    //充当老师角色  如培养底子较好的学生
    class ConcreteBuildStrong:BaseBuilder
    {
        private Product pro = new Product();

        public override void BuildPartLower()
        {
            pro.Add("我们先来学习算法导论");
        }
        public override void BuildPartHigher()
        {
            pro.Add("然后学习数据结构与算法分析");
        }
        public override Product GetResult()
        {
            return pro;
        }
    }
    //充当老师角色  如培养底子较弱的学生
    class ConcreteBuildWeak:BaseBuilder
    {
        private Product pro = new Product();

        public override void BuildPartLower()
        {
            pro.Add("我们先来学习C#从入门到精通");
        }

        public override void BuildPartHigher()
        {
            pro.Add("然后学习C#高级编程");
        }

        public override Product GetResult()
        {
            return pro;
        }
    }
    //充当学校,指挥培养学生  指挥者类
    class Director
    {
        //学校因材施教 根据学生不同的底子 分配给不同的老师培养
        public void Construct(BaseBuilder builder)
        {
            builder.BuildPartLower();

            builder.BuildPartHigher();
        }
    }
    class Program
    {
        //以培养学生为例
        //每个学生的培养过程是一致的,通过相同的培养过程创建出不同的学生
        //培养学生应用到了建造者模式
        static void Main(string[] args)
        {
            //家长要把两个孩子交给学校培养,一个底子好,另一个底子相对薄弱
            Director dic = new Director();
            BaseBuilder stronger = new ConcreteBuildStrong();
            BaseBuilder weaker = new ConcreteBuildWeak();
            //学校把底子好的分派给老师A
            dic.Construct(stronger);
            //老师批准培养好的学生毕业
            Product proStrong = stronger.GetResult();
            proStrong.Show();
         
            dic.Construct(weaker);
            Product proWeaker = weaker.GetResult();
            proWeaker.Show();
           
            Console.Read();
        }
    }

分析:建造者模式将建造代码与表示代码分离,可以使客户端不需要知道产品的内部细节,从而降低了客户端与具体产品间的耦合度;(解耦)

建造者模式主要用于“分步骤创建一个复杂的产品”,“分步骤”是一个固定的过程,复杂对象的各个部分是经常变化的

上篇文章中抽象工厂模式解决了“系列产品的”的创建,而本文建造者模式解决的是“产品部分”的创建问题

关于建造者模式的学习就到此结束了,希望能够帮到读者(有不理解地方可以给我留言哦O(∩_∩)O~),如有不恰当地方,欢迎斧正,感谢您的阅读!

原文地址:https://www.cnblogs.com/jdzhang/p/6946180.html