摘要: 这一条其实也没说啥,就是策略模式。碰到这种场景时,定义一个策略接口,然后不同策略子类实现它,主类包含这个接口的引用就可以了。 嵌套类是指被定义在另一个类的内部的类。嵌套类存在的目的应该只是为它的外围类提供服务。嵌套类包括四种:静态成员类、非静态成员类、匿名类和局部类。除了第一种之外,其他三种都被称为 阅读全文
posted @ 2016-03-20 16:44 张万帆 阅读(155) 评论(0) 推荐(0) 编辑
摘要: 这一条就举了一个反例,说有些接口中只包含常量。这是对接口的不良使用。要实现相同的功能,应该使用不可实例化的工具类(第4条说过)。 另外,还学了一招,如果大量使用的话,就需要一直用类似PhysicalConstants.AVOGADROS_NUMBER的方式来调用。这时,可以用java的静态导入机制( 阅读全文
posted @ 2016-03-20 15:54 张万帆 阅读(225) 评论(0) 推荐(0) 编辑
摘要: 这两条中,提到了一个很重要的概念骨架实现。也就是说,抽象类实现接口的形式。这样的好处是,接口本来不能提供默认的实现,现在可以在抽象类中实现一些关键的方法。结合了接口和抽象类的优点。例如AbstractCollection,就是一个骨架实现。 另外,在查看源码的过程中,发现居然接口中也可以有方法体了。 阅读全文
posted @ 2016-03-20 15:26 张万帆 阅读(190) 评论(0) 推荐(0) 编辑
摘要: 第15条:使可变性最小化 通过一个复数类来看不可变类。 复数类具有实部和虚部,它提供的加减乘除运算都是返回新的Complex实例,而不是修改这个实例。不可变对象有很多优点,它只有一种状态,即被创建时的状态,而且前面也提到过,它本质上是线程安全的。 这里还用到一个小技巧,对频繁使用的值,为它们提供公有 阅读全文
posted @ 2016-03-20 14:04 张万帆 阅读(223) 评论(0) 推荐(0) 编辑
摘要: 设计良好的模块的模块与设计不好的模块区别在于,设计良好的模块会隐藏所有的实现细节,把它的API与他的实现清晰地隔离开来。然后模块之间只通过API通信。 信息隐藏之所以非常重要,是因为它可以有效地解除各模块的耦合性,使这些模块可以独立地开发、测试。 类和接口有两种访问级别。包级私有和公有,包级私有就是 阅读全文
posted @ 2016-03-20 12:16 张万帆 阅读(122) 评论(0) 推荐(0) 编辑