2017-02-14 00:00:00 +0000   |     java design pattern template pattern container   |   Viewed times   |    

骨架实现 (Skeletal Implementation)

骨架实现的架构是一个三明治结构:接口 - 骨架实现类 - 实际类

它结合了接口和抽象类的优点。接口的优点是可以 多继承实现mixin。但接口不能实现部分功能。抽象类可以。

骨架实现先找出接口所有操作中的 基本操作。 基本操作就是指,如果有了基本操作的结果,其他方法都可以依赖这个结果完成操作。

典型的骨架实现是Collections Framework。 每个容器接口都有一个对应的骨架实现。以MapAbstractMap为例。

AbstractMap中的 基本操作entrySet()方法,返回的 Set视图。然后Map接口定义的大部分方法,都可以通过调用Set视图的Iterator来实现。

下面代码是Map通过继承AbstractMap骨架实现,最快速实现Map接口的代码,只要实现了entrySet()抽象方法,就基本实现了一个 只读不写 的Map。

public class SimplestMap<K,V> extends AbstractMap<K,V> {
    Map<K,V> map = new HashMap<>();
    @Override
    public Set<Map.Entry<K,V>> entrySet() { // 自己写entrySet的话,可以利用AbstractMap.SimpleEntry
        return map.entrySet();
    }
}