封装

四种访问控制符

  • 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的工厂函数
    • 链式调用,逻辑清晰
      1. Person p = PersonBuild.aPerson()
      2. .withFirstName('')
      3. .withLastName('')
      4. .withAge(22)
      5. // ...
      6. .build();