• C#编程模式之建造者模式


            模式介绍:各位伙伴,我们继续对编程模式进行深入浅出的探讨,本文主要介绍的模式是建造者模式。相对与工厂模式关注单一性质的产品而言,建造者模式更关注的是复杂产品的创建,尤其是产品各个部分的创建过程。建造者模式会根据各部分的不同来创建不同的产品。

            适用性介绍:工厂模式适用于创建单一性质的产品;建造者模式适用于创建复杂、由多个部分组成的对象。

            下面我们根据具体的例子来进行深入的理解。

            1、创建产品类。

    1. ///
    2. /// 被创建的产品类
    3. ///
    4. public class Product
    5. {
    6. ///
    7. /// 产品属性或说明的集合
    8. ///
    9. private List<string> listAttribute = new List<string>();
    10. ///
    11. /// 添加属性
    12. ///
    13. /// 添加的属性值
    14. public void AddAttribute(string strAttribute)
    15. {
    16. listAttribute.Add(strAttribute);
    17. }
    18. ///
    19. /// 显示所有属性
    20. ///
    21. ///
    22. public string ShowAllAttribute()
    23. {
    24. string strResult = "我的属性值如下:";
    25. foreach (string strAttribute in listAttribute)
    26. {
    27. strResult += strAttribute + ",";
    28. }
    29. return strResult.TrimEnd(',');
    30. }
    31. }

            2、创建建造者基类。此类中定义包含赋值给产品所有属性的抽象方法,以及获取产品的抽象方法。

    1. ///
    2. /// 建造者基类
    3. ///
    4. public abstract class CBuilder
    5. {
    6. ///
    7. /// 建造属性1
    8. ///
    9. ///
    10. public abstract void BuilderAttributeOne();
    11. ///
    12. /// 建造属性2
    13. ///
    14. ///
    15. public abstract void BuilderAttributeTwo();
    16. ///
    17. /// 建造属性3
    18. ///
    19. ///
    20. public abstract void BuilderAttributeThree();
    21. ///
    22. /// 建造产品
    23. ///
    24. ///
    25. public abstract Product GetProduct();
    26. }

            3、创建具体的建造者类。建造者类用来实现基类,并定义具体的赋值和获取的过程。

    1. ///
    2. /// 具体的建造者A
    3. ///
    4. public class CSpecificBuilderA : CBuilder
    5. {
    6. private Product product = new Product();
    7. public override void BuilderAttributeOne()
    8. {
    9. product.AddAttribute("我是产品A");
    10. }
    11. public override void BuilderAttributeThree()
    12. {
    13. product.AddAttribute("生产我需要10分钟");
    14. }
    15. public override void BuilderAttributeTwo()
    16. {
    17. product.AddAttribute("每天生产我12个小时");
    18. }
    19. public override Product GetProduct()
    20. {
    21. return product;
    22. }
    23. }
    24. ///
    25. /// 具体的建造者B
    26. ///
    27. public class CSpecificBuilderB : CBuilder
    28. {
    29. private Product product = new Product();
    30. public override void BuilderAttributeOne()
    31. {
    32. product.AddAttribute("我是产品B");
    33. }
    34. public override void BuilderAttributeThree()
    35. {
    36. product.AddAttribute("生产我需要15分钟");
    37. }
    38. public override void BuilderAttributeTwo()
    39. {
    40. product.AddAttribute("每天生产我18个小时");
    41. }
    42. public override Product GetProduct()
    43. {
    44. return product;
    45. }
    46. }

            4、创建指挥者类。此类用来决定如何创建产品,不同的创建方法会产生不同的产品。

    1. ///
    2. /// 指挥者
    3. ///
    4. public class CDirector
    5. {
    6. ///
    7. /// 指挥创建产品的属性,此处可以随意增加或者修改是否添加相关属性
    8. ///
    9. ///
    10. public void ConstructMethodOne(CBuilder builder)
    11. {
    12. builder.BuilderAttributeOne();
    13. builder.BuilderAttributeTwo();
    14. builder.BuilderAttributeThree();
    15. }
    16. ///
    17. /// 指挥创建产品的属性,此处可以随意增加或者修改是否添加相关属性
    18. ///
    19. ///
    20. public void ConstructMethodTwo(CBuilder builder)
    21. {
    22. builder.BuilderAttributeOne();
    23. builder.BuilderAttributeThree();
    24. }
    25. }

            5、客户端调用。

    1. ///
    2. /// 建造者测试
    3. ///
    4. ///
    5. ///
    6. private void btn_builder_Click(object sender, EventArgs e)
    7. {
    8. //创建一个指挥者
    9. CDirector director = new CDirector();
    10. //创建一个建造者基类
    11. CBuilder builder;
    12. //创建一个产品实例
    13. Product product;
    14. //建造者基类赋值为建造者A
    15. builder = new CSpecificBuilderA();
    16. //指挥创建builder的属性
    17. director.ConstructMethodOne(builder);
    18. //建造产品
    19. product = builder.GetProduct();
    20. tbox_builder.Text = product.ShowAllAttribute();
    21. //建造者基类赋值为建造者B
    22. builder = new CSpecificBuilderB();
    23. director.ConstructMethodTwo(builder);
    24. product = builder.GetProduct();
    25. tbox_builder.Text += "\r\n" + product.ShowAllAttribute();
    26. }

            至此,建造者模式的例程就基本完成,希望能给各位朋友带来一定的启发,也欢迎各位朋友批评指正。 

  • 相关阅读:
    Kubernetes基础(二)-Headless Service
    linux 系统文件目录颜色及特殊权限对应的颜色
    我用 Python 写了一个统计博客园文章信息的小工具
    【中秋国庆不断更】OpenHarmony组件内状态变量使用:@State装饰器
    数字ic验证门槛高吗?
    Covalent Network(CQT)构建 Web3 最大的结构化数据集,开拓AI、安全性和数据质量的融合
    uniapp开发微信小程序运行报错不知道是哪里有问题,求帮看看
    求阶乘n!
    电脑乐园杂志电脑乐园杂志社电脑乐园编辑部2023年第3期目录
    为React Ant-Design Table增加字段设置 | 京东云技术团队
  • 原文地址:https://blog.csdn.net/weixin_50236846/article/details/137911103