`

effective java 2nd Item 18

 
阅读更多

Prefer interfaces to abstract classes

其中一段:

Interfaces allow the construction of nonhierarchical type frameworks.
Type hierarchies are great for organizing some things, but other things don’t fall
neatly into a rigid hierarchy. For example, suppose we have an interface representing
a singer and another representing a songwriter:

public interface Singer {
  AudioClip sing(Song s);
}

public interface Songwriter {
  Song compose(boolean hit);
}

In real life, some singers are also songwriters. Because we used interfaces
rather than abstract classes to define these types, it is perfectly permissible for a
single class to implement both Singer and Songwriter. In fact, we can define a
third interface that extends both Singer and Songwriter and adds new methods
that are appropriate to the combination:

public interface SingerSongwriter extends Singer, Songwriter {
  AudioClip strum();
  void actSensitive();
}

You don’t always need this level of flexibility, but when you do, interfaces are
a lifesaver. The alternative is a bloated class hierarchy containing a separate class
for every supported combination of attributes. If there are n attributes in the type
system, there are 2^n possible combinations that you might have to support.
This is
what’s known as a combinatorial explosion. Bloated class hierarchies can lead to
bloated classes containing many methods that differ only in the type of their arguments,
as there are no types in the class hierarchy to capture common behaviors .

问题:
1. 这里提到的在type system中的attributes是指什么,因为对示例接口而言,没有域,难不成是指方法?

2. 为什么会有2^n种可能组合?假如有abc三个属性,那是(),(a),(b),(c),(a,b),(a,c)(b,c),(a,b,c)=2^3  
如果是这个意思,它又要如何support?

3. Bloated class hierarchies can lead to bloated classes containing many methods that differ only in the type of their arguments, why? 为什么只能在参数类型上有区别?

4. there are no types in the class hierarchy to capture common behaviors?
这句话如何解释?

thanks in advance!

 

 

 

my answer:

 

因为是替代方案,所以试着对比着来看
interface:

public interface SingerSongwriter extends Singer, Songwriter {
  AudioClip strum();
  void actSensitive();
}

实际上它有4个方法

bloated class hierarchy:
就可能有
class SingerSongwriter extends Singer{
  AudioClip sing(Song s);
  Song compose(boolean hit);
  AudioClip strum();
  void actSensitive(); 
}
or
class SingerSongwriter extends Songwriter {
  AudioClip sing(Song s);
  Song compose(boolean hit);
  AudioClip strum();
  void actSensitive();
}
但 无论哪一种,都会缺失一种类型(there are no types in the class hierarchy to capture common behaviors),以及可能连带缺失的类型,比如Song等,这样可能就会导致Bloated class hierarchies can lead to bloated classes containing many methods that differ only in the type of their arguments。
同时也满足了一个类包含所有可能属性组合(The alternative is a bloated class hierarchy containing a separate class for every supported combination of attributes.),我觉得这里可以把attributes理解为方法之类的,方法也属于对象属性之一。这里恰好是2^2=4,有点全组合的味道, 但是不知道strum()和actSensitive怎么来的,权且把strum看成是sing和compose组合的产物,actSensitive代 表全组合中的空,这样就能解释2^n,总的来说还有些牵强的地方,但不知道他说的是否100%精准。

 

http://stackoverflow.com/questions/48605/why-do-most-system-architects-insist-on-first-coding-to-an-interface

分享到:
评论

相关推荐

    Effective Java读书笔记.pdf

    "Effective Java读书笔记" Effective Java是一本关于Java编程语言的经典书籍,本笔记主要总结了Java语言的发展历程、静态工厂方法的应用、构造器模式的使用等重要知识点。 一、Java语言的发展历程 Java语言的发展...

    Effective Java第三版1

    《Effective Java》是Java编程领域的一本经典著作,由Joshua Bloch撰写,该书的第三版继续提供了关于如何编写高效、优雅、可维护的Java代码的指导。以下是基于给出的目录和部分内容提取的一些关键知识点: ### 第一...

    effective-java.pdf

    标题“effective-java.pdf”与描述“effective-java.pdf”表明本文档是关于Java编程实践的指南,且内容可能来自于一本名为《Effective Java》的书籍,该书是由Joshua Bloch编写,被广泛认为是Java编程的权威指南。...

    effective java 读书笔记

    《Effective Java》是Java开发领域的经典著作,作者Joshua Bloch深入浅出地阐述了编写高效、健壮的Java代码的技巧和最佳实践。以下是对该书部分内容的详细解释: 1. **产生和销毁对象** - Item1:静态工厂方法相比...

    effectiveJava课件分享

    在编程领域,特别是Java开发中,"Effective Java"是一本非常经典的书籍,由Joshua Bloch撰写,书中提出了一系列最佳实践和设计原则,以帮助开发者编写出更高效、更安全的代码。根据提供的标题和描述,我们将探讨三个...

    《Effective Java》读书分享.pptx

    "Effective Java 读书分享" 《Effective Java》读书分享.pptx 是一本 Java 编程语言指南,旨在帮助开发者编写高质量、可维护的 Java 代码。该书包含 90 个条目,每个条目讨论一条规则,涵盖了 Java 编程语言的...

    Effective.Enterprise.Java.中文版 高清pdf 下载

    《Effective Enterprise Java》是Java开发领域的一本经典著作,由著名技术专家Bill Venners编著,被广大Java开发者誉为“四大名著”之一。这本书深入探讨了在企业级Java开发中如何写出高效、可维护和易于理解的代码...

    effective c++ 2nd 中文

    《Effective C++ 2nd Edition》是一本由Scott Meyers撰写的经典C++编程指南,中文版的出现使得更多的中国开发者能深入理解C++的精髓。这本书的核心目标是帮助程序员写出更高效、更易于理解和维护的C++代码。在描述中...

    Effective-Java-2nd-Edition-(May-2008).zip_effective java

    《Effective Java》是Java编程领域的一本经典著作,由Joshua Bloch撰写,第二版发布于2008年。这本书旨在提供实用的编程指导,帮助开发者写出更高效、更可维护的Java代码。以下是对书中核心知识点的详细解读: 1. *...

    Effective java 3 学习记录.docx

    Effective Java 3 学习记录 本学习记录主要介绍了 Effective Java 3 中的静态工厂方法和 Builder 模式两部分内容。 一、静态工厂方法 静态工厂方法是指返回类实例的命名规则,例如:from、of、valueOf、instance ...

    Effective Java.docx

    ### Effective Java - 创建和销毁对象 #### 第一条:用静态工厂方法代替构造器 **优点:** 1. **命名清晰,易于使用:** 静态工厂方法通过明确的命名方式,使得用户更容易理解方法的功能及其预期结果。例如,`...

    Effective Java.zip

    《Effective Java》是一本经典Java编程指南,作者是Joshua Bloch,这本书深入探讨了如何编写高质量、高效、可维护的Java代码。以下是对压缩包中各章节主要知识点的详细阐述: 1. **第2章 创建和销毁对象** - 单例...

    effective-java 配套代码

    《Effective Java》是Java开发领域的一本经典著作,由Joshua Bloch撰写,书中提出了一系列编程最佳实践和设计模式,帮助开发者写出更高效、更可靠、更易于维护的Java代码。配套代码`effective-java-examples-master`...

    1_Effective_Java_2nd_Edition_proglib_java_Joshua_

    《Effective Java》是Java编程领域的一本经典著作,由知名程序员和计算机科学家Joshua Bloch撰写。这本书的第二版深入探讨了如何编写高效、可维护的Java代码,并提供了许多实用的编程指南和最佳实践。以下是根据标题...

    Effective Java 3rd edition(Effective Java第三版英文原版)附第二版

    Item 18: Favor composition over inheritance Item 19: Design and document for inheritance or else prohibit it Item 20: Prefer interfaces to abstract classes Item 21: Design interfaces for posterity ...

Global site tag (gtag.js) - Google Analytics