簡體   English   中英

有效的Java項目16(第2版) - Forwarding類是否僅用於允許重用?

[英]Effective Java item 16 (2nd edition) - Is Forwarding class only used to allow re-use?

我正在通過Effective Java, Item-16 Favor composition over inheritance 我查看了下面的Forwarding class示例。

我想知道有一個ForwardingSet類是什么意思? InstrumentedSet可以很好地實現Set並擁有一個調用所有方法的私有實例。

是否可以促進重用並防止冗余,如果我們最終在將來需要除了基本行為之外還需要做一些類型的InstrumentedSet 它只是面向未來的設計,還是我缺少的其他東西?

// Reusable forwarding class 
public class ForwardingSet<E> implements Set<E> {     
  private final Set<E> s;     
  public ForwardingSet(Set<E> s) { this.s = s; }     
  public void clear()               { s.clear();            }    
  public boolean contains(Object o) { return s.contains(o); }
...
}

// Wrapper class - uses composition in place of inheritance   
public class InstrumentedSet<E> extends ForwardingSet<E> {     
      private int addCount = 0;     
      public InstrumentedSet(Set<E> s) { super(s); } 
      @Override public boolean add(E e) {         
          addCount++;
          return super.add(e);
       }
       ...
    }

是的, ForwardingSet是一個框架。

如果你有寫一些Set ,與其他加工對象物S Set小號內部的“香草”的頂部,但提供不同的功能Set ,你最好幾次寫的共同部分一次不行。

有效Java中的 Joshua Bloch將其稱為“組合”,盡管實際實現看起來更像裝飾器模式

作為名為ForwardingSet的類, Guava中可以使用實際的實現。

是否可以促進重用並防止冗余,如果我們最終在將來需要除了基本行為之外還需要做一些類型的InstrumentedSet?

是。

它只是面向未來的設計嗎?

是。

還是我還缺少其他的東西?

不,你沒有遺漏任何東西。

是促進重復使用並防止冗余嗎? 是。
它只是面向未來的設計嗎? 是。
我還缺少其他東西嗎? 沒有。

“轉發”通常被稱為“ 委托 ”。
請參閱: 委派模式的目的是什么?

具有委托實現的Java類的一些示例:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM