Java Builder 模式,你搞明白了么?

例子

复制代码
 1 public class Outer {
 2     private String name;
 3     private int age;
 4 
 5     public static class Builder {
 6         private String name;
 7         private int age;
 8 
 9         public Builder() {}  // 可以不写,编译器会为它生成默认构造方法
10 
11         public Builder withName(String name) {  // 链式调用,返回this
12             this.name = name;
13             return this;
14         }
15 
16         public Builder withAge(int age) { // 链式调用,返回this
17             this.age = age;
18             return this;
19         }
20 
21         public Outer build() {
22             return new Outer(this);
23         }
24     }
25 
26     private Outer(Builder b) {
27         this.age = b.age;
28         this.name = b.name;
29     }
30 }
复制代码

 

使用:

1 Outer outer = new Outer.Builder()  // 创建(实例化)内部静态类Builder,才能调用Builder类中的实例方法withName等
2        .withName("名字哦")
3        .withAge(7)
4        .build();
  • 链式调用风格方便构建复杂对象:在使用Builder模式时,设置各个属性的方法返回当前Builder对象本身,这使得可以采用链式调用的方式来构建复杂对象(特别是参数较多时,容易出现参数顺序混淆等问题),代码更加简洁易读(无需写一堆构造器)
  • 灵活构建对象:对于具有多个可选属性的复杂对象,使用Builder模式可以方便地只设置需要的属性,而不用为每个可能的属性组合都去定义不同的构造函数重载形式。比如对于ProjectInfo类,如果有些情况下只需要设置部分属性来创建一个简化的对象表示,就可以通过Builder模式灵活地选择调用哪些属性设置方法来构建对象,提高了对象构建的灵活性。

静态类

https://www.cnblogs.com/Alex--Yang/p/3386863.html

在Java世界里,经常被提到静态这个概念,static作为静态成员变量和成员函数的修饰符,意味着它为该类的所有实例所共享,也就是说当某个类的实例修改了该静态成员变量,其修改值为该类的其它所有实例所见。最近一个项目里频繁用到static修饰的内部类,再读了一下《Effective Java》才明白为什么会用static来修饰一个内部类也就是本文的中心——静态类。

  如果一个类要被声明为static的,只有一种情况,就是静态内部类。如果在外部类声明为static,程序会编译都不会过。在一番调查后个人总结出了3点关于内部类和静态内部类(俗称:内嵌类)

1.静态内部类跟静态方法一样,只能访问静态的成员变量和方法,不能访问非静态的方法和属性,但是普通内部类可以访问任意外部类的成员变量和方法

 

2.静态内部类可以声明普通成员变量和方法,而普通内部类不能声明static成员变量和方法。

 

3.静态内部类可以单独初始化: 

Inner i = new Outer.Inner();

 普通内部类初始化:

Outer o = new Outer();
Inner i = o.new Inner();

 

  静态内部类使用场景一般是当外部类需要使用内部类,而内部类无需外部类资源,并且内部类可以单独创建的时候会考虑采用静态内部类的设计。如上的Builder设计模式例子。

对于静态类总结是:1.如果类的构造器或静态工厂中有多个参数,设计这样类时,最好使用Builder模式,特别是当大多数参数都是可选的时候。

                               2.如果现在不能确定参数的个数,最好一开始就使用构建器即Builder模式。

其它 

 https://zhuanlan.zhihu.com/p/80910560

posted on   gogoy  阅读(70)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示