一:接口优于抽象类
接口的优势:
现有的类很容易被更新,以实现新的接口。
接口是定义mixin(混合类型)的理想选择。
接口允许我们构造非层次接口的类型框架。
抽象类的作用和优势:
可以利用抽象类为每个接口定义一个骨架实现,其美妙之处在于它为抽象类提供了实现的帮助,但又不强加“抽象类被用作类型定义时”所特有的严格限制。
一般来说要在公有接口中增加方法,而不破坏实现这个接口的所有现有类是不可能的,二通过骨架实现类一定程度上通过默认实现减小带来的影响。因此接口一旦设计不可更改。
这里很好的例子是Mina的源码在IOAdapter部分的实现,可以看一下另一篇博客《深入阅读Mina源码(3) —— Mina之IOAdapter》中的图,有着清晰的骨架结构。
二:接口只用于定义类型
出于非用接口表明客户端可以如何使用类的动作的目的使用接口都是不恰当的。
常量接口模式是不良的使用习惯,虽然常量接口是Java中接口的一种形式出现,正确的做法应该是在工具类(前面有提到,不可实例化)定义,当大量用到工具类导出的常量的时候可以通过利用静态导入机制,避免用类名修饰常量名。(不推荐常量接口的原因是其导致把实现细节泄露到API中,对用户而言没有太大意义,而且当类需要修改不需要这个常量的时候还必须实现这个接口,保证二进制兼容性[你的改变不影响别人的改变],而且子类也收到污染。)
另外如果可以用枚举的话,枚举也是比较好的方式,Java的枚举是按照枚举类的方式实现的,通过实例化的不可实例化(就是在类内部实例化,构造函数为private)。虽然和OO的思想不太相符,但枚举比常量接口有更广的实用性和更好的性能,也许也是避免过多的被定义常量接口而产生的。
Java.io.ObjectStreamConstants是书中提到的反面教材,但其实也不是Java初衷吧,其目的是通过数据流、序列化和文件系统提供系统输入和输出,限定一些输入输出需要限定的值。这个接口从java1.1开始就引入,一旦发布就不能再去修改了,即便有了更好的方式,因此接口定义需要谨慎。
三:类层次优于标签类
这部分可以理解为多态的作用,避免将分类的标签信息存储在同一个类中。
四:用函数对象表示策略
函数指针的主要用途就是实现策略模式。在java中为了实现这种模式,要声明一个接口来表示该策略,并且为每个策略声明一个实现了该接口的类。当一个具体策略只被使用一次时,通常使用匿名类来声明和实例化这个具体策略类。当一个具体策略是设计用来重复使用的时候,它的类通常是要被实现为私有的静态成员类,并通过静态final域被导出,其类型为该策略接口。一个典型的例子是Comparator接口
五:优先考虑静态成员类
四种嵌套类:静态成员类、非静态成员类、匿名类、局部类
1.静态成员类与非静态成员类
非静态成员类的每个实例都隐含着与外围类的一个外围实例关联。如果嵌套类的实例可以在它的外围类的实例之外独立存在,这个嵌套类就必须是静态成员类:在没有外围实例的情况下,要想创建非静态成员类的实例是不可能的。非静态成员类在创建实例的时候都会建立不可修改的关联,消耗一定的实例空间。
非静态成员类的一种常见用法是定义Adapter,例如Set等实现自己迭代器。
如果声明成员类不要求访问外围实例,就要始终用static声明为静态成员类。
私有静态成员类常用于代表外围类所代表对象的组件。如Map的实现类内部的Entry,不然每个Entry都包含一个指向Map的引用,浪费很多的空间。
对共有、收保护的成员类一旦发布不能修改。
2.匿名类
不能有静态成员,且只有在非静态环境才有外部实例。
三种常见用法:动态创建函数对象;创建过程对象,如Runnable;静态工厂方法的内部。
3.四种嵌套类使用
à如果一个嵌套类需要在单个方法之外仍然可见,或者它太长了,不适合于放在方法内部,就应该使用成员类。
à如果成员类的每个实例都需要一个指向其外围实例的引用,就做成非静态,否则静态。
à假设这个类属于一个方法内部,如果你只需要在一个地方创建实例并已经有了一个预置的类型可以说明这个类的特征,就做成匿名类,否则局部类。两者都需要非常简短,不然影响到可读性。
相关推荐
"Effective Java读书笔记" Effective Java是一本关于Java编程语言的经典书籍,本笔记主要总结了Java语言的发展历程、静态工厂方法的应用、构造器模式的使用等重要知识点。 一、Java语言的发展历程 Java语言的发展...
读书笔记:Effective Java中文版第3版笔记
《Effective Java》是Java开发领域的经典著作,作者Joshua Bloch深入浅出地阐述了编写高效、健壮的Java代码的技巧和最佳实践。以下是对该书部分内容的详细解释: 1. **产生和销毁对象** - Item1:静态工厂方法相比...
《Effective Java》是Java编程领域的一本经典著作,由Joshua Bloch撰写,该书的第三版继续提供了关于如何编写高效、优雅、可维护的Java代码的指导。以下是基于给出的目录和部分内容提取的一些关键知识点: ### 第一...
读书笔记:Effective Java中文版 第2版
Effective Java 读书笔记 - 枚举与注解 本文总结了Effective Java 中关于枚举与注解的知识点,涵盖了枚举类型的优点、使用指南、避免使用 int 常量、使用 EnumSet 和 EnumMap 等。 枚举类型的优点 枚举类型提供了...
3. **接口与抽象类**:讨论了接口和抽象类在设计上的差异,强调接口用于定义类型,抽象类用于共享实现,以及Java 8引入的默认方法和静态方法。 4. **枚举**:介绍枚举类型的强大之处,如枚举的自动序列化、枚举常量...
总的来说,《Effective Enterprise Java》中文版是一本值得每一个Java开发者阅读的书籍,它不仅提供了丰富的编程技巧,还强调了代码的可读性和可维护性,对于提升个人技能和团队开发效率都有极大的帮助。通过深入...
读书笔记:Effective.Java中文版(第3版)
标题《effective-java.pdf》表明本文档是关于Java编程语言的实践指南,而描述说明了这是一份根据...文档《effective-java.pdf》详细地探讨了静态工厂方法在设计和实现上的优势,强调了其在现代Java编程实践中的重要性。
"Effective Java 读书分享" 《Effective Java》读书分享.pptx 是一本 Java 编程语言指南,旨在帮助开发者编写高质量、可维护的 Java 代码。该书包含 90 个条目,每个条目讨论一条规则,涵盖了 Java 编程语言的...
《Effective Java》是Java...以上仅是《Effective Java》一书中部分核心知识点的概述,实际的读书笔记中会更详细地解释这些概念,并给出具体的示例代码。通过深入学习和实践,开发者可以极大地提升其Java编程的水平。
《Effective Enterprise Java》是一本深度探讨企业级Java开发实践的权威书籍,中文版名为《Effective.Enterprise....无论你是初学者还是有经验的开发者,都能从《Effective Enterprise Java》中获得宝贵的指导和启示。
本学习记录主要介绍了 Effective Java 3 中的静态工厂方法和 Builder 模式两部分内容。 一、静态工厂方法 静态工厂方法是指返回类实例的命名规则,例如:from、of、valueOf、instance 或 getinstance、create 或 ...
读书笔记:Effective Java中文版学习项目
ENCprime中文使用指南:分析序列信息、可计算GC%、Nc ——the effective number of codons[密码子的有效数量]、Ncp ——the effective number of codons prime、ScaledChi 、SumChi 、df —— the corresponding ...
记录了我的effective-Python学习笔记,精简了effective-Python中重要的部分。effective-Python是一本值得多看几遍的书,但是看后面的几遍的时候完全可以直接看自己的学习笔记。此学习笔记侧重与比较实用的部分即前四...
根据给定的文件信息,以下是对“精版Effective STL读书笔记”的详细解析,重点提炼了STL(标准模板库)中的关键知识点。 ### 标题:“精版Effective STL读书笔记” 此标题暗示了文档是针对《Effective STL》一书的...