为什么这个非静态成员类被认为是适配器



我目前正在阅读Effective Java第三版(第24项-第112页(,我很困惑。

为了上下文的考虑,我需要引用这本书的一小部分。

为什么MyIterator类是适配器?我认为它没有适应任何东西,还是我误解了?谢谢&抱歉语法错误。

书中引用:

非静态成员类的一个常见用途是定义Adapter[Gamma95],该适配器允许将外部类的实例视为某个不相关类的实例。例如Map接口通常使用非静态成员类来实现Map的CCD_ 3、CCD_,和价值观方法。类似地,集合的实现接口,如SetList,通常使用非静态成员类来实现它们的迭代器:

// Typical use of a nonstatic member class
public class MySet<E> extends AbstractSet<E> {
... // Bulk of the class omitted
@Override public Iterator<E> iterator() {
return new MyIterator();
}
private class MyIterator implements Iterator<E> {
...
}
}

[Gamma95]适配器模式的意图是:

将类的接口转换为客户端期望的另一个接口。适配器允许类一起工作,否则由于接口不兼容而无法工作。

因此,如果您的类需要Iterator,则可以通过调用iterator()方法将MyIterator实例传递给它。MyIterator被认为是一个适配器,因为它使MySet看起来像Iterator。在这种情况下,使用内部类进行实现只是一种实现选择。AbstractSet需要实现iterator()方法。

最新更新