前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >23种设计模式,建造者模式实战

23种设计模式,建造者模式实战

原创
作者头像
小马哥学JAVA
发布2024-04-06 12:49:53
1920
发布2024-04-06 12:49:53

建造者模式是一种对象创建型设计模式,用于创建复杂对象。其核心思想是将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。建造者模式通常包括一个Director类,用于管理构建过程,和多个Builder类,每个Builder负责构造复杂对象的一部分。

建造者模式的概念

建造者模式主要用于需要生成的对象具有复杂的内部结构,当这些对象的构造过程需要被细分为不同的步骤,或者需要多个部分或子对象协同工作才能生成时非常有用。它允许用户仅通过指定复杂对象的类型和内容就能构建它们,隐藏了内部构造的细节。

建造者模式的优点

  1. 分步骤构造复杂对象:建造者模式允许按步骤构造一个复杂对象,不必一次性指定所有的构建细节。这使得构建方法可以更清晰、更灵活。
  2. 可以很容易地改变产品的内部表示:具体建造者之间相互独立,增加新的具体建造者无需修改现有类的代码,很好地遵循了开闭原则。
  3. 封装性好:用户不需要知道对象的内部构建细节,建造者会负责处理对象的构建过程。

建造者模式的缺点

  1. 会产生多余的Builder对象以及Director对象:可能会导致系统的复杂性增加。
  2. 产品之间的差异性必须足够大:如果产品之间的差异性不大,则不一定需要使用建造者模式。

Java代码示例

假设我们要创建一个Computer对象,它有CPURAMstorage等属性。我们可以使用建造者模式来逐步构建这个复杂对象。

首先定义Computer类和ComputerBuilder接口:

java复制代码

代码语言:javascript
复制
public class Computer {
    private String CPU;
    private String RAM;
    private String storage;

    // Computer的构造方法设置为private,通过Builder来构建
    private Computer(String CPU, String RAM, String storage) {
        this.CPU = CPU;
        this.RAM = RAM;
        this.storage = storage;
    }

    // Getter方法省略...

    public static class Builder {
        private String CPU;
        private String RAM;
        private String storage;

        public Builder setCPU(String CPU) {
            this.CPU = CPU;
            return this;
        }

        public Builder setRAM(String RAM) {
            this.RAM = RAM;
            return this;
        }

        public Builder setStorage(String storage) {
            this.storage = storage;
            return this;
        }

        public Computer build() {
            return new Computer(CPU, RAM, storage);
        }
    }
}

使用建造者模式构建对象:

java复制代码

代码语言:javascript
复制
public class BuilderPatternDemo {
    public static void main(String[] args) {
        Computer computer = new Computer.Builder()
                .setCPU("Intel Core i7")
                .setRAM("16GB")
                .setStorage("1TB SSD")
                .build();

        System.out.println(computer); // 此处应有Computer类的toString方法输出计算机配置
    }
}

在这个例子中,Computer的构造函数被设为私有,这意味着它不能直接被外部类实例化。相反,Computer的构建过程被封装在其静态内部类Builder中。客户端代码通过链式调用Builder类的方法来逐步设置Computer对象的状态,最后通过调用build方法来获取最终构建的对象。这种方式使得客户端代码在构建复杂对象时更加清晰、灵活。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 建造者模式的概念
  • 建造者模式的优点
  • 建造者模式的缺点
  • Java代码示例
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档