对公有类, 应该用包含私有域和公有访问方法(getter)的类来代替, 对可变的类, 加上公有设值方法(setter).-> 保留了改变内部表现的灵活性.如果类是包级私有的, 或者是私有的嵌套类, 直接暴露它的数据域并没有本质的错误..., 并添加公有的静态工厂.优点: 提供了缓存能力, 可以提供多个不同名字的静态方法, 使相同参数类型可以构造出不同的对象(用构造器就不行)....继承机制会把超类API中的缺陷传播到子类中, 而复合则允许设计新的API来隐藏这些缺陷.第19条 要么为继承而设计, 并提供文档说明, 要么就禁止继承对于专门为了继承而设计的类, 需要具有良好的文档.该类的文档必须精确地描述覆盖每个方法所带来的影响...(因为超类的构造器在子类的构造器之前运行, 如果子类中覆盖版本的方法依赖于子类构造器所执行的任何初始化工作, 该方法将不会如预期般地执行.)在为了继承而设计类的时候, Cloneable和Serializable...实例的数据类型没有提供任何关于其风格的线索.标签类过于冗长, 容易出错, 效率低下.用子类型修正:定义抽象基类, 方法行为若依赖于标签值, 则定义为抽象方法.