一、引言
父母希望孩子们受到良好的教育,但孩子的培养是很复杂的,从认字,写字,颂词,到语数外理化生音体美的培养等等,如果让父母一个个这样培养孩子是很不容易的,这个时候就出现了学校,学校封装了孩子每一步的培养要做的事情,父母只需要把孩子送到学校,学校负责把培养好的孩子交换给父母。啊。。。这个例子就做抛砖引玉了,在程序设计中,同样存在这样的设计思想,下面介绍今天我们要学习的建造者模式
二、建造者模式
定义:将一个复杂对象的创建与它的表示分离,使得同样的构建过程创建出不同的表示。在这个例子中,家长和学校是直接联系的,学校指挥老师把学生一步步的培养成才,真正给学生添加技能的是老师。下面通过一个例子帮助我们理解建造者模式
//充当学生类
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~),如有不恰当地方,欢迎斧正,感谢您的阅读!