C#设计模式——建造者模式

墨蓝 2022-08-20 07:15 216阅读 0赞

建造者模式:

一、定义:

将一个复杂对象的构建与他的表示分离,使得同样的构建过程可以创建不同的表示。

二、使用条件:内部构建间的建造顺序通常稳定,但对象内部构建通常面临着复杂的变化。意思就比如建造小人,建造小人都是先头后身体,再左右臂最后是腿脚,这个建造顺序是稳定的,但具体小人的外貌如何,体型如何性别如何都是不定的,复杂变化着的,具体建造什么样的小人,这就需要有个指挥者Director。

三、了解优缺点:

该模式使得建造代码与表示代码分离,由于建造者隐藏了产品是如何组装的,所以若需要改变一个产品内部的表示,只需要再定义一个具体的建造者就可以了。

四、应用:

1、建造者模式结构图:

Center

2、代码展示:

  1. <span style="font-size:18px;"> <span style="white-space:pre"> </span>/// <summary>
  2. <span style="white-space:pre"> </span>/// Product类——产品类,由多个部件组成
  3. <span style="white-space:pre"> </span>/// </summary>
  4. <span style="white-space:pre"> </span>class Product
  5. <span style="white-space:pre"> </span>{
  6. IList<string> parts = new List<string>();
  7. public void Add(string part)
  8. {
  9. parts.Add(part);
  10. }
  11. public void Show()
  12. {
  13. Console.WriteLine("\n产品 创建---");
  14. foreach (string part in parts)
  15. {
  16. Console.WriteLine(part);
  17. }
  18. }
  19. /// <summary>
  20. /// Builder类——抽象建造者类,确定产品由两个部件PartA和PartB组成,并声明一个得到产品建造后结果的办法GetResult
  21. /// </summary>
  22. abstract class Builder
  23. {
  24. public abstract void BuildPartA();
  25. public abstract void BuildPartB();
  26. public abstract Product GetResult();
  27. }
  28. /// <summary>
  29. /// ConcreteBuilder1类——具体建造者类
  30. /// </summary>
  31. class ConcreteBuilder1 : Builder
  32. {
  33. private Product product = new Product();
  34. public override void BuildPartA()
  35. {
  36. product.Add("部件A");
  37. }
  38. public override void BuildPartB()
  39. {
  40. product.Add("部件B");
  41. }
  42. public override Product GetResult()
  43. {
  44. return product;
  45. }
  46. }
  47. /// <summary>
  48. /// ConcreteBuilder2类——具体建造者类
  49. /// </summary>
  50. class ConcreteBuilder2 : Builder
  51. {
  52. private Product product = new Product();
  53. public override void BuildPartA()
  54. {
  55. product.Add("部件X");
  56. }
  57. public override void BuildPartB()
  58. {
  59. product.Add("部件Y");
  60. }
  61. public override Product GetResult()
  62. {
  63. return product;
  64. }
  65. }
  66. /// <summary>
  67. /// Director类——指挥者类 指挥建造过程
  68. /// </summary>
  69. class Director
  70. {
  71. public void Construct(Builder builder)
  72. {
  73. builder.BuildPartA();
  74. builder.BuildPartB();
  75. }
  76. }
  77. //客户端调用:
  78. static void Main(string[] args)
  79. {
  80. Director director = new Director();
  81. Builder b1 = new ConcreteBuilder1();
  82. Builder b2 = new ConcreteBuilder2();
  83. ///指挥者用ConcreteBuilder1的方法来建造产品
  84. director.Construct(b1);
  85. Product p1 = b1.GetResult();
  86. p1.Show();
  87. director.Construct(b2);
  88. Product p2 = b2.GetResult();
  89. p2.Show();
  90. Console.Read();
  91. } </span>

3、适用场景:

在当创建复杂对象的算法应该独立于该对象的组成部分以及他们的装配方式时适用的模式。

五、总结:

建造者模式使建造代码与表示分离,使得同样的构建过程可以创建不同的表示。用户只需指定需要建造的类型就可以得到产品,具体建造的过程和细节不需知道。对象内部构建间的建造顺序稳定。

发表评论

表情:
评论列表 (有 0 条评论,216人围观)

还没有评论,来说两句吧...

相关阅读

    相关 C#设计模式——建造模式

    建造者模式: 一、定义: 将一个复杂对象的构建与他的表示分离,使得同样的构建过程可以创建不同的表示。 二、使用条件:内部构建间的建造顺序通常稳定,但对象内部构建通常

    相关 设计模式建造模式

    举例:画两个不同的小人,容易违反依赖倒转原则(即抽象不应该依赖细节,细节应该依赖于抽象)。容易缺胳膊少腿。最好的办法是规定建造小人的固定步骤,都有头,身体,两手两脚。即使是需要