面向对象编程思想-建造者模式
Posted 快跑啊兔兔
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象编程思想-建造者模式相关的知识,希望对你有一定的参考价值。
一、引言
父母希望孩子们受到良好的教育,但孩子的培养是很复杂的,从认字,写字,颂词,到语数外理化生音体美的培养等等,如果让父母一个个这样培养孩子是很不容易的,这个时候就出现了学校,学校封装了孩子每一步的培养要做的事情,父母只需要把孩子送到学校,学校负责把培养好的孩子交换给父母。啊。。。这个例子就做抛砖引玉了,在程序设计中,同样存在这样的设计思想,下面介绍今天我们要学习的建造者模式
二、建造者模式
定义:将一个复杂对象的创建与它的表示分离,使得同样的构建过程创建出不同的表示。在这个例子中,家长和学校是直接联系的,学校指挥老师把学生一步步的培养成才,真正给学生添加技能的是老师。下面通过一个例子帮助我们理解建造者模式
//充当学生类 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~),如有不恰当地方,欢迎斧正,感谢您的阅读!
以上是关于面向对象编程思想-建造者模式的主要内容,如果未能解决你的问题,请参考以下文章
编程思想设计模式创建模式creational建造者模式builder