zoukankan      html  css  js  c++  java
  • 面向对象编程思想-建造者模式

    一、引言

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

    二、建造者模式

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

     //充当学生类
        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~),如有不恰当地方,欢迎斧正,感谢您的阅读!

  • 相关阅读:
    敏捷开发 之 计划、测试 与 重构
    敏捷开发 之 理论概述篇
    第二十章 排查和调试Web程序 之 设计异常处理策略
    第十九章 排查和调试Web程序 之 防止和排查运行时问题
    第十八章 提升用户体验 之 减少带宽占用
    第十七章 提升用户体验 之 使用MVC扩展功能控制程序行为
    第十六章 提升用户体验 之 设计实现routes
    第十五章 提升用户体验 之 设计实现MVC controllers 和 actions
    第十四章 提升用户体验 之 设计实现国际化和本地化
    Nginx系统学习笔记(3)同一端口下设置Alias(虚拟目录)
  • 原文地址:https://www.cnblogs.com/jdzhang/p/6946180.html
Copyright © 2011-2022 走看看