创建和销毁对象
- 静态工厂方法代替构造器
- 优势1 有方法名
- 不必要每次调用都创建一个对象
- 可以返回原类型的任意子类
Ball.newBasketball()
Ball.newFootball()
- 遇到多参数的对象可用考虑使用Builder
- 单例
- 内存泄漏
- 栈等自管理内存的对象,引用对象弹出时也要自行释放相关对象
- 缓存,使用若引用
- 监听器和回调注入
Object的方法
- 重写equals必须重写hashCode:相等的对象必须具有相同的散列码
- 总是重写toString
类与接口
-
使可变性最小化
- 不要提供任何会修改对象状态的方法
- 使用状态模式来解决状态修改问题
- 保证类不会被扩展
- 避免粗心的子类破坏类的不可变行为
- 使用所有域都是final
- 出于线程安全考虑
- 使所有域都成为私有
- 域通过
- 确保任何可变组件的互斥访问
- 即线程安全。可变组件,不能允许同时读写
- 不要提供任何会修改对象状态的方法
-
复合优于继承
- 打破了封装性,子类依赖于超类的实现,除非这个超类是专门为了扩展而设计的,否则超类的实现细节发生了改变,子类哪怕没有任何的修改,都可能受到影响
- 如果一个子类a继承了一个超类b,必须满足了a is b这样的条件才是合理的,如果a只是b的一个扩展,只是部分功能依赖了b的实现,那就不应该使用继承
- 要么为继承而设计,要么禁止继承
- 继承暴露了过多的超类实现细节。
-
接口优于抽象类
- 现有的类很容易被更新,来实现新的接口
- 接口是定义混合类型的李响选择
- 接口允许我们构造非层次结构的类型框架
-
类层次优于标签类
- 标签类是指用某个type来代表该对象是某种特定的对象
- 改不如增
-
函数对象表示策略
- 类似于函数式编程
-
枚举
- EnumSet代替位域
- EnumMap代替index索引