白冥 发表于 2024-5-21 16:22:23

【java】设计模式-建造者模式

本帖最后由 白冥 于 2024-5-24 22:10 编辑

public class House {
    private LivingRoom livingRoom;
    private Bedroom bedroom;
    private Bathroom bathroom;
    private House (Builder builder) {
      this.livingRoom=builder.livingRoom;
      this.bedroom=builder.bedroom;
      this.bathroom=builder.bathroom;
    }
    static final class Builder {
      private LivingRoom livingRoom;
      private Bedroom bedroom;
      private Bathroom bathroom;

      public Builder setLivingRoom (LivingRoom livingRoom) {
            this.livingRoom=livingRoom;
            return this;
      }

      public Builder setBedroom (Bedroom bedroom) {
            this.bedroom = bedroom;
            return this;
      }

      public Builder setBathroom (Bathroom bathroom) {
            this.bathroom = bathroom;
            return this;
      }

      public House build () {
            return new House (this);
      }
    }
}      建造者模式(Builder Pattern)是一种对象构建的设计模式,它允许你在一个单独的类中组合所有必要的逻辑来创建复杂对象,同时又能保持代码的可读性和封装性。建造者模式将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。**建造者模式通常包括以下几个角色:**
[*]Product(产品):这是需要被构建的对象,通常包含多个组成部件或属性。
[*]Builder(建造者):这是一个抽象接口,用于规范产品的构建步骤。它通常包含一系列用于构建产品各个部分的抽象方法,但并不涉及具体的构建细节。
[*]ConcreteBuilder(具体建造者):这是Builder接口的实现,它提供了具体的构建逻辑,包括设置产品的各个属性和组件。一个ConcreteBuilder通常与一个未完成的产品实例相关联,并提供了建造和获取产品的方法。
[*]Director(指挥者):这是一个负责指导ConcreteBuilder如何构建产品的类。它确保产品的构建过程按照特定的顺序进行,但它并不直接参与产品的构建工作,而是委托给ConcreteBuilder来完成。
[*]Client(客户端):这是使用Director和ConcreteBuilder来构建产品的代码。客户端通常只需要与Director交互,而不需要关心具体的构建细节。
**建造者模式的主要优点包括:**
[*]封装性:建造者模式将构建复杂对象的步骤封装在ConcreteBuilder中,使得客户端代码更加简洁和清晰。
[*]灵活性:通过定义不同的ConcreteBuilder类,可以轻松地改变产品的构建逻辑,而无需修改客户端代码。
[*]可读性:通过使用Director类来指导构建过程,可以增加代码的可读性和可维护性。
      建造者模式通常用于构建具有多个步骤和复杂组件的对象,例如,配置复杂的系统配置、创建一个包含多个部分和属性的文档或报告等。通过分离构建逻辑和表示逻辑,建造者模式使得代码更加模块化、可测试和可维护。


      这段代码展示了一个典型的建造者模式实现。在这个例子中,House 类代表要被构建的产品,而 Builder 是一个内部静态类,它扮演了具体建造者的角色。Builder 类中的方法允许客户端设置 House 对象的各个组成部分,并最终通过 build() 方法构建出一个完整的 House 对象。**这段代码的功能描述如下:**
[*]产品(Product):House 类是产品,代表一个房子。它有三个主要组成部分:客厅(LivingRoom)、卧室(Bedroom)和浴室(Bathroom)。这些部分在 House 类中以私有成员变量的形式存在。
[*]建造者(Builder):Builder 内部类是一个具体建造者,它负责构建 House 对象。这个类有三个私有成员变量,分别对应房子的三个部分,并提供相应的设置方法(setLivingRoom、setBedroom、setBathroom)。每个设置方法都返回 Builder 类型的实例,以便支持链式调用。最后,build() 方法用于创建并返回一个配置完成的 House 对象。
[*]客户端使用:客户端可以通过创建 Builder 的实例,然后调用其设置方法来配置房子,并最终调用 build() 方法来获取一个完整的 House 对象。
         在这个例子中,没有明确的 Director 角色,因为 Builder 自己承担了构建的逻辑。在更复杂的场景中,Director 可能会作为一个独立的类存在,用于指导 Builder 如何构建产品,这里的Builder 既包含了构建逻辑也包含了指导逻辑。

娱乐法师火布偶 发表于 2024-5-21 16:46:33

这个模式好像没用过呢

Burry 发表于 2024-5-21 16:58:48

这个代码好像有不少新功能,观摩看看。

gay_damao 发表于 2024-5-21 20:38:39

我为什么会尝试在论坛里看代码,一行字都看不懂

红叶黄花 发表于 2024-5-21 21:02:22

妈诶谁能想到离开大学第一次看代码是在游戏论坛上

领带骑士 发表于 2024-5-21 21:06:29

翻了翻这个模块的其他帖子,每个都解决了一些或一个论坛相关的问题
但这帖子有点意义不明,也不像是想交流的样子,发在这里做什么
纯个人总结记录可以发日志,想分享交流经验可以去csdn

Garrettx 发表于 2024-5-21 21:18:36

惊呆,在我坛看到了 Java

饥渴难耐的G 发表于 2024-5-21 23:00:49

泥潭的含金量还在升高,虽然看不懂代码

zhuovboyan 发表于 2024-5-21 23:05:37

0-0 今天也是感叹论坛大佬的硬核高技术力的一天呢~

chouki 发表于 2024-5-22 20:29:31

好高级的知识,代码小白的我完全看不懂{:6_194:}

bigbigbig3 发表于 2024-5-24 22:23:31

专业的楼主又来了
分享的代码很厉害额~

星之子 发表于 2024-6-22 00:51:08

进入面向对象编程,点了一份corner cases,OOP炸了(doge

jiushigelj 发表于 2024-6-25 23:56:55

哇,想起以前买设计模式书看的时候了
页: [1]
查看完整版本: 【java】设计模式-建造者模式