面向对象编程思想

时间:2023-01-02 10:04:37

一、引言

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

二、建造者模式

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

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