12 2018 档案
摘要:有时候,你可能会试图写一些退化的类(degenerate classes),除了集中实例属性之外别无用处: 因为这些类的数据属性可以直接被访问,因此这些类不提供封装的好处(条目 15)。在不更改 API 的情况下你无法更改其表示形式,无法强制执行不变量,并且在访问属性时无法执行辅助操作。坚持面向对象
阅读全文
摘要:设计良好的组件与设计不好的组件最重要的区别就是它们隐藏内部数据和其他实现细节的程度。一个设计良好的组件隐藏了它的所有实现细节,干净地将它的 API 与实现分离开来。然后组件只通过它们的 API 进行交流,并且对彼此的内部工作一无所知。这一概念,被称为信息隐藏或封装,是软件设计的基本原则。 信息隐藏如
阅读全文
摘要:与本章讨论的其他方法不同, 方法并没有在 类中声明。相反,它是 接口中的唯一方法。 通过实现 接口,一个类表明它的实例有一个自然序( natural ordering )。对实现 接口的对象所组成的数组排序非常简单,如下所示: 通过实现 接口,可以让你的类与所有依赖此接口的泛型算法和集合实现进行交互
阅读全文
摘要:Cloneable 接口不包含任何方法,它只是决定了 Object 中受保护的 clone 方法的行为:如果一个类实现了 Cloneable 接口,那么 Object 的 clone 方法将返回该对象的逐个属性(field by field)拷贝;否则会抛出 异常。这是一个非常反常的接口使用,不应该
阅读全文