设计模式之——建造者模式

比眉伴天荒 2021-09-21 16:38 540阅读 0赞

设计模式:

前辈们对代码开发经验的总结,是解决特定问题的一系列套路。它不是语法规定。而是一套用来提高代码可复用性、可维护性、可读性、稳健性、以及安全性的解决方案

设计模式的本质是面向对象设计原则的实际运用,是对类的封装性、继承性和多态性以及类的关联关系和组合关系的充分理解。

正确使用设计模式具有以下优点:

  • 可以提高程序员的思维能力、编程能力和设计能力。
  • 使程序设计更加标准化、代码编制更加I程化,使软件开发效率大大提高,从而缩短软件的开发周期。
  • 使设计的代码可重用性高、可读性强、可靠性高、灵活性好、可维护性强。
  • 建造者模式也属于创建型模式,它提供了一种创建对象的最佳方式。
  • 定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示
  • 主要作用:在用户不知道对象的建造过程和细节的情况下就可以直接创建复杂的对象。
  • 用户只需要给出指定复杂对象的类型和内容,建造者模式负责按顺序创建复杂对象(把内部的建造过程和细节隐藏起来)
  • 例子:

    1. 工厂(建造者模式) : 负责制造汽车(组装过>程和细节在工厂内)
    2. 汽车购买者(用户):你只需要说出你需要的>型号(对象的类型和内容),然后直接购买就可以使用了(不需要知道汽车是怎么组装的(车轮、车门、>发动机、方向盘等等) )

优点:
◆产品的建造和表示分离,实现了解耦。使用建造者模式可以使客户端不必知道产品内部组成的细节。
◆将复杂产品的创建步骤分解在不同的方法中,使得创建过程更加清晰
◆具体的建造者类之间是相互独立的,这有利于系统的扩展。增加新的具体建造者无需修改原有类库的代码,符合“开闭原则”。
缺点:
◆建造者模式所创建的产品- -般具有较多的共同点,其组成部分相似;如果产品之间的差异性很大,则不适合使用建造者模式,因此其使用范围受到- -定的限制。
◆如果产品的内部变化复杂,可能会导致需要定义很多具体建造者类来实现这种变化,导致系统变得很庞大。

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0xfZmx5X0o_size_16_color_FFFFFF_t_70

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0xfZmx5X0o_size_16_color_FFFFFF_t_70 1

下面是实现的代码

核心程序逻辑,builder用于建造,调用不同的建造模块能建造不同的产品

  1. /**
  2. * @Descrintion:指挥,推动工作的进程以及规定方式,工程的核心
  3. * @version: 1.0
  4. */
  5. public class Director {
  6. /**
  7. * 指挥工人按照指定顺序做某事,需要进行调整的时候,进行切换调用顺序即可
  8. * @param builder
  9. * @return
  10. */
  11. public Product builer(Builder builder){
  12. builder.builderGround();
  13. builder.builderSteel();
  14. builder.builderElectricWire();
  15. builder.builderPaint();
  16. return builder.getProduct();
  17. }
  18. }

工程的核心,推动公司进程以及按照规定的方式进行

  1. /**
  2. * @Descrintion:指挥,推动工作的进程以及规定方式,工程的核心
  3. * @version: 1.0
  4. */
  5. public class Director {
  6. /**
  7. * 指挥工人按照指定顺序做某事,需要进行调整的时候,进行切换调用顺序即可
  8. * @param builder
  9. * @return
  10. */
  11. public Product builer(Builder builder){
  12. builder.builderGround();
  13. builder.builderSteel();
  14. builder.builderElectricWire();
  15. builder.builderPaint();
  16. return builder.getProduct();
  17. }
  18. }

工人模块,用于建造者的建造工作,不同的工人可以进行不同的建造,主要是对建造的实现化

  1. /**
  2. * @Descrintion:具体的建造者,工人去完成任务
  3. * @version: 1.0
  4. */
  5. public class Worker extends Builder {
  6. private Product product;
  7. public Worker() {
  8. this.product = new Product();
  9. }
  10. @Override
  11. void builderGround() {
  12. product.setBuilderGround("建造地基");
  13. System.out.println("建造地基");
  14. }
  15. @Override
  16. void builderSteel() {
  17. product.setBuilderSteel("搭建钢筋");
  18. System.out.println("搭建钢筋");
  19. }
  20. @Override
  21. void builderElectricWire() {
  22. product.setBuilderElectricWire("铺设电路");
  23. System.out.println("铺设电路");
  24. }
  25. @Override
  26. void builderPaint() {
  27. product.setBuilderPaint("粉刷墙面");
  28. System.out.println("粉刷墙面");
  29. }
  30. @Override
  31. Product getProduct() {
  32. return product;
  33. }
  34. }

产品,JavaBean类,表示产品

  1. /**
  2. * @Descrintion:产品——房子
  3. * @version: 1.0
  4. */
  5. public class Product {
  6. private String builderGround;//建造地基
  7. private String builderSteel;//搭建钢筋
  8. private String builderElectricWire;//铺设电路
  9. private String builderPaint;//粉刷墙面
  10. @Override
  11. public String toString() {
  12. return "Product{" +
  13. "builderGround='" + builderGround + '\'' +
  14. ", builderSteel='" + builderSteel + '\'' +
  15. ", builderElectricWire='" + builderElectricWire + '\'' +
  16. ", builderPaint='" + builderPaint + '\'' +
  17. '}';
  18. }
  19. public String getBuilderGround() {
  20. return builderGround;
  21. }
  22. public void setBuilderGround(String builderGround) {
  23. this.builderGround = builderGround;
  24. }
  25. public String getBuilderSteel() {
  26. return builderSteel;
  27. }
  28. public void setBuilderSteel(String builderSteel) {
  29. this.builderSteel = builderSteel;
  30. }
  31. public String getBuilderElectricWire() {
  32. return builderElectricWire;
  33. }
  34. public void setBuilderElectricWire(String builderElectricWire) {
  35. this.builderElectricWire = builderElectricWire;
  36. }
  37. public String getBuilderPaint() {
  38. return builderPaint;
  39. }
  40. public void setBuilderPaint(String builderPaint) {
  41. this.builderPaint = builderPaint;
  42. }
  43. }

接下来就是测试类,用于测试建造者模式建造的优点

  1. /**
  2. * @Descrintion:
  3. * @version: 1.0
  4. */
  5. public class Test {
  6. public static void main(String[] args) {
  7. //指挥
  8. Director director = new Director();
  9. //指挥具体的工人,顺序完成某事,不同的工人,可以完成不同的事情,有平房,有高楼,不同能力的人可以进行不同的建造
  10. Product builer = director.builer(new Worker());
  11. System.out.println(builer.toString());
  12. }
  13. }

建议编写或者,复制代码进行演示…这样理解的会更快

发表评论

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

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

相关阅读

    相关 设计模式建造模式

    建造者模式也是创建型模式中的一种,所谓的创建型模式,指的是如何创建对象,关注的是对象的创建过程。 建造者模式是将一个复杂对象分解成多个相对简单的子模块进行创建,比如游戏中常见

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

    > 设计模式: > > 前辈们对代码开发经验的总结,是解决特定问题的一系列套路。它不是语法规定。而是一套用来提高代码可复用性、可维护性、可读性、稳健性、以及安全性的解决方案