封装
四种访问控制符
- public:所有人能访问
- protected:只有子类
- package private(不写默认就是这个):同个包的类
- private:只有自己
- 没有
getter、setter防范和JavaBean约定
- getter:可以得到一个属性的方法
- setter:可以设置一个属性的方法
- JavaBean约定:
- 非布尔类型:有一个getFiled和setFiled方法,就对应有一个非布尔类型filed属性
- 布尔类型:有一个isFiled和setFiled方法,就对应有一个布尔类型filed属性
- 一般库实现JSON转Java类都会遵循JavaBean约定
设计模式:抽象工厂方法
- 用静态工厂方法去创建对象,而不是构造方法
- 使用静态工厂方法代替构造器
- 将构造方法私有化
类的访问限定符
- public:所有人可以访问
- 不写:包级私有
- hack:创建一个同名包可以绕过包级私有类访问限制, JVM会识别为同个包(不推荐使用)
- private inner class:只能在同个类中访问
Java Module系统(JDK 9)
- Java Platform Module System
- 模块化系统之前,没有办法阻止绕过包限制对包级私有类的访问
设计模式:Builder模式
- 问题:我们的类有可能有成百个成员变量,这时构造器可能就有几十上百个参数,代码很难看懂
- 该问题使用抽象工厂方法无法解决,需要builder模式
- tips: IDEA 有 builder generator插件
- 为该类创建一个Builder类
- 使用Builder创建类的代码是类似于这样的:
- 使用Builder的工厂函数
- 链式调用,逻辑清晰
Person p = PersonBuild.aPerson()
.withFirstName('')
.withLastName('')
.withAge(22)
// ...
.build();