美文网首页
视图与适配器

视图与适配器

作者: 洞妖洞妖01 | 来源:发表于2020-05-21 20:27 被阅读0次

    ◆ 视图:类比数据库的视图概念。将集合类对象中的数据重新映射到一个数据集合中,但这个集合不是一个物理上存在的对象实体,而是对原集合类对象的再映射,数据物理地址未变,只是访问数据的接口变了。

    ◆ 适配器:适配器是指这样一个对象:它把功能委托给一个后备对象,从而为后备对象提供一个可以替代的接口。

    例:Map接口的keySet方法返回该Map对象的Set视图,该视图包含该Map中所有的key。HashMap的keyset()方法返回了key的Set类型视图,其中采用了适配器模式,部分源码如下:

        public Set<K> keySet() {
            Set<K> ks = keySet;
            if (ks == null) {
                ks = new KeySet();
                keySet = ks;
            }
            return ks;
        }
    
        final class KeySet extends AbstractSet<K> {
            public final int size()                 { return size; }
            public final void clear()               { HashMap.this.clear(); }
            public final Iterator<K> iterator()     { return new KeyIterator(); }
            public final boolean contains(Object o) { return containsKey(o); }
            public final boolean remove(Object key) {
                return removeNode(hash(key), key, null, false, true) != null;
            }
            public final Spliterator<K> spliterator() {
                return new KeySpliterator<>(HashMap.this, 0, -1, 0, 0);
            }
            public final void forEach(Consumer<? super K> action) {
                Node<K,V>[] tab;
                if (action == null)
                    throw new NullPointerException();
                if (size > 0 && (tab = table) != null) {
                    int mc = modCount;
                    for (int i = 0; i < tab.length; ++i) {
                        for (Node<K,V> e = tab[i]; e != null; e = e.next)
                            action.accept(e.key);
                    }
                    if (modCount != mc)
                        throw new ConcurrentModificationException();
                }
            }
        }
    
    

    相关文章

      网友评论

          本文标题:视图与适配器

          本文链接:https://www.haomeiwen.com/subject/ixdtahtx.html