静态内部类实现 Builder 构建者模式

本文通过示例代码展示了如何在Java中利用静态内部类来实现Builder构建者模式,详细解释了创建Builder类的步骤,包括设置默认值、创建返回Builder对象的方法以及构建最终对象的build方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

直接上代码:

public class HttpClient {
   
   
    private String mUrl;
    private String mMethod;
    private int mTimeOut;
    
    public String getUrl() {
   
   
        return mUrl;
    }

    public String getMethod() {
   
   
        return mMethod;
    }

    public int getTimeOut(
### 静态内部类的作用及应用场景 #### 作用 静态内部类是一种特殊的嵌套类,它属于外部类的一部分,但并不依赖于外部类的实例即可独立存在。这意味着可以通过 `OuterClass.StaticInnerClass` 的方式直接访问和使用该类,而无需先创建外部类的实例[^1]。 这种设计使得静态内部类非常适合用于封装逻辑上紧密关联的功能模块,同时保持代码结构清晰简洁。例如,在某些情况下,当某个功能仅对外部类有意义时,将其作为静态内部类实现能够减少全局命名空间污染并增强代码可读性和维护性。 #### 应用场景 以下是几种常见的静态内部类的应用场景: 1. **辅助工具类** 如果一个类只会在另一个特定类中频繁使用,则可以将前者声明为后者的一个静态内部类。这不仅有助于组织相关联的概念,还能够让这些帮助型组件隐藏起来以免干扰其他部分程序开发人员的工作流。比如数据库连接池管理器可能包含专门处理SQL语句解析的小型实用程序类[^2]。 2. **配置选项容器** 当面对具有众多初始化参数的对象创建需求时(如引用所提到的例子),采用静态内部类配合Builder模式是一个优雅解决方案。这种方式允许开发者以更灵活可控的方式指定所需属性而不必担心传统多参构造函数带来的混乱或错误风险。 3. **枚举替代方案** (已较少见) 虽然现代Java推荐使用Enum关键字来定义常量集合,但在早期版本或其他特殊场合下,人们有时会借助静态内部类模拟类似行为——即把一组固定不变的数据项集中存储在一个单独的地方以便统一管理和检索。 4. **事件监听机制中的适配器类** GUI编程领域经常遇到各种类型的Listener接口需要实现的情况。为了简化操作流程,许多框架提供了默认实现了全部方法却留空待子类覆盖的关键区域给用户自定义业务逻辑的机会。这类Adapter通常会被设成相应Manager类下的静态成员形式供快速获取原型副本之需。 ```java // 示例:静态内部类作为Builder模式的一部分 public class ComputerFactory { private final String brand; private final String manufacturer; // 私有构造防止随意new对象 private ComputerFactory(Builder builder){ this.brand = builder.brand; this.manufacturer = builder.manufacturer; } @Override public String toString() { return "Computer{" + "brand='" + brand + '\'' + ", manufacturer='" + manufacturer + '\'' + '}'; } // 静态内部类充当Builder角色 public static class Builder{ private String brand; private String manufacturer; public Builder setBrand(String brand){ this.brand = brand; return this; // 支持链式调用 } public Builder setManufacturer(String manufacturer){ this.manufacturer = manufacturer; return this; } public ComputerFactory build(){ return new ComputerFactory(this); } } } // 使用示例 ComputerFactory computer = new ComputerFactory.Builder() .setBrand("Dell") .setManufacturer("USA Factory") .build(); System.out.println(computer.toString()); ``` 上述例子展示了如何利用静态内部类构建复杂对象的同时维持其不可变特性以及提高API易用性的技巧。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值