模式介绍:各位伙伴,我们继续对编程模式进行深入浅出的探讨,本文主要介绍的模式是建造者模式。相对与工厂模式关注单一性质的产品而言,建造者模式更关注的是复杂产品的创建,尤其是产品各个部分的创建过程。建造者模式会根据各部分的不同来创建不同的产品。
适用性介绍:工厂模式适用于创建单一性质的产品;建造者模式适用于创建复杂、由多个部分组成的对象。
下面我们根据具体的例子来进行深入的理解。
1、创建产品类。
/// <summary>
/// 被创建的产品类
/// </summary>
public class Product
{
/// <summary>
/// 产品属性或说明的集合
/// </summary>
private List<string> listAttribute = new List<string>();
/// <summary>
/// 添加属性
/// </summary>
/// <param name="strAttribute">添加的属性值</param>
public void AddAttribute(string strAttribute)
{
listAttribute.Add(strAttribute);
}
/// <summary>
/// 显示所有属性
/// </summary>
/// <returns></returns>
public string ShowAllAttribute()
{
string strResult = "我的属性值如下:";
foreach (string strAttribute in listAttribute)
{
strResult += strAttribute + ",";
}
return strResult.TrimEnd(',');
}
}
2、创建建造者基类。此类中定义包含赋值给产品所有属性的抽象方法,以及获取产品的抽象方法。
/// <summary>
/// 建造者基类
/// </summary>
public abstract class CBuilder
{
/// <summary>
/// 建造属性1
/// </summary>
/// <returns></returns>
public abstract void BuilderAttributeOne();
/// <summary>
/// 建造属性2
/// </summary>
/// <returns></returns>
public abstract void BuilderAttributeTwo();
/// <summary>
/// 建造属性3
/// </summary>
/// <returns></returns>
public abstract void BuilderAttributeThree();
/// <summary>
/// 建造产品
/// </summary>
/// <returns></returns>
public abstract Product GetProduct();
}
3、创建具体的建造者类。建造者类用来实现基类,并定义具体的赋值和获取的过程。
/// <summary>
/// 具体的建造者A
/// </summary>
public class CSpecificBuilderA : CBuilder
{
private Product product = new Product();
public override void BuilderAttributeOne()
{
product.AddAttribute("我是产品A");
}
public override void BuilderAttributeThree()
{
product.AddAttribute("生产我需要10分钟");
}
public override void BuilderAttributeTwo()
{
product.AddAttribute("每天生产我12个小时");
}
public override Product GetProduct()
{
return product;
}
}
/// <summary>
/// 具体的建造者B
/// </summary>
public class CSpecificBuilderB : CBuilder
{
private Product product = new Product();
public override void BuilderAttributeOne()
{
product.AddAttribute("我是产品B");
}
public override void BuilderAttributeThree()
{
product.AddAttribute("生产我需要15分钟");
}
public override void BuilderAttributeTwo()
{
product.AddAttribute("每天生产我18个小时");
}
public override Product GetProduct()
{
return product;
}
}
4、创建指挥者类。此类用来决定如何创建产品,不同的创建方法会产生不同的产品。
/// <summary>
/// 指挥者
/// </summary>
public class CDirector
{
/// <summary>
/// 指挥创建产品的属性,此处可以随意增加或者修改是否添加相关属性
/// </summary>
/// <param name="builder"></param>
public void ConstructMethodOne(CBuilder builder)
{
builder.BuilderAttributeOne();
builder.BuilderAttributeTwo();
builder.BuilderAttributeThree();
}
/// <summary>
/// 指挥创建产品的属性,此处可以随意增加或者修改是否添加相关属性
/// </summary>
/// <param name="builder"></param>
public void ConstructMethodTwo(CBuilder builder)
{
builder.BuilderAttributeOne();
builder.BuilderAttributeThree();
}
}
5、客户端调用。文章来源:https://www.toymoban.com/news/detail-858223.html
/// <summary>
/// 建造者测试
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btn_builder_Click(object sender, EventArgs e)
{
//创建一个指挥者
CDirector director = new CDirector();
//创建一个建造者基类
CBuilder builder;
//创建一个产品实例
Product product;
//建造者基类赋值为建造者A
builder = new CSpecificBuilderA();
//指挥创建builder的属性
director.ConstructMethodOne(builder);
//建造产品
product = builder.GetProduct();
tbox_builder.Text = product.ShowAllAttribute();
//建造者基类赋值为建造者B
builder = new CSpecificBuilderB();
director.ConstructMethodTwo(builder);
product = builder.GetProduct();
tbox_builder.Text += "\r\n" + product.ShowAllAttribute();
}
至此,建造者模式的例程就基本完成,希望能给各位朋友带来一定的启发,也欢迎各位朋友批评指正。 文章来源地址https://www.toymoban.com/news/detail-858223.html
到了这里,关于C#编程模式之建造者模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!