Effect Java

创建和销毁对象

  • 静态工厂方法代替构造器
    • 优势1 有方法名
    • 不必要每次调用都创建一个对象
    • 可以返回原类型的任意子类
Ball.newBasketball()
Ball.newFootball()
  • 遇到多参数的对象可用考虑使用Builder
  • 单例
  • 内存泄漏
    • 栈等自管理内存的对象,引用对象弹出时也要自行释放相关对象
    • 缓存,使用若引用
    • 监听器和回调注入

Object的方法

  • 重写equals必须重写hashCode:相等的对象必须具有相同的散列码
  • 总是重写toString

类与接口

  • 使可变性最小化

    • 不要提供任何会修改对象状态的方法
      • 使用状态模式来解决状态修改问题
    • 保证类不会被扩展
      • 避免粗心的子类破坏类的不可变行为
    • 使用所有域都是final
      • 出于线程安全考虑
    • 使所有域都成为私有
      • 域通过
    • 确保任何可变组件的互斥访问
      • 即线程安全。可变组件,不能允许同时读写
  • 复合优于继承

    • 打破了封装性,子类依赖于超类的实现,除非这个超类是专门为了扩展而设计的,否则超类的实现细节发生了改变,子类哪怕没有任何的修改,都可能受到影响
    • 如果一个子类a继承了一个超类b,必须满足了a is b这样的条件才是合理的,如果a只是b的一个扩展,只是部分功能依赖了b的实现,那就不应该使用继承
    • 要么为继承而设计,要么禁止继承
    • 继承暴露了过多的超类实现细节。
  • 接口优于抽象类

    • 现有的类很容易被更新,来实现新的接口
    • 接口是定义混合类型的李响选择
    • 接口允许我们构造非层次结构的类型框架
  • 类层次优于标签类

    • 标签类是指用某个type来代表该对象是某种特定的对象
    • 改不如增
  • 函数对象表示策略

    • 类似于函数式编程
  • 枚举

    • EnumSet代替位域
    • EnumMap代替index索引

你可能感兴趣的:(Effect Java)