2011-03-28 203 views
1

由於研究原因,我正在尋找Javadoc以確定「策略模式」內部Javadoc的實施。我發現2類實際上繼承了FilterInputStream類,BufferedInputStream類和DataInputStream類。繼承的類覆蓋FilterInputStream類的read()方法。現在根據「戰略模式」我必須從另一個類Javadoc找到一個方法,它的主體read()方法也被調用。任何人都可以幫助我嗎?javadoc中的策略模式

P.S如果您在Javadoc內部有任何其他戰略模式的實施,請告訴我。

在此先感謝

+0

我已經閱讀了幾次,但我不確定你的意思是「在javadoc」。您是否正在尋找_produces_ Javadoc程序代碼中的策略模式? – Pops 2011-03-28 19:37:56

+0

其實我沒有在Java庫中尋找戰略模式。但是用javadoc更容易識別繼承,而不是僅僅打開java src並開始尋找:) – pikk 2011-03-28 19:40:02

+0

我認爲@pikk的意思是:在Java平臺的Javadoc中。 – 2011-03-28 19:49:50

回答

2

輸入流看起來更多的是裝飾者模式,而不是戰略的一個例子。

策略模式的更好的例子是ThreadFactoryRejectedExecutionHandlerThreadPoolExecutor中的使用。

編輯:

RejectedExecutionHandler是決定如何處理ThreadPoolExecutor拒絕任務的戰略的一個接口。這種策略有幾種具體實現(ThreadPoolExecutor.AbortPolicyThreadPoolExecutor.DiscardPolicy等)。 ThreadPoolExecutor可以配置爲使用其中之一。

所以,它對應於this picture(從wikipedia article)以下列方式:

  • ThreadPoolExecutorContext
  • RejectedExecutionHandlerStrategy接口
  • ThreadPoolExecutor.AbortPolicyThreadPoolExecutor.DiscardPolicy是具體的策略(ConcreteStrategyAConcreteStrategyB
+0

hm但ThreadFactory和RejectedExecutionHandler不會覆蓋ThreadPoolexecutor的任何方法 – pikk 2011-03-28 20:15:50

+0

@pikk:已更新。 – axtavt 2011-03-29 07:59:11

0

我會說使用Java的ServiceLoader方案的任何東西都在使用策略模式。基本上算法(可能是它們的一大套)直到運行時才確定。服務加載器本身成爲一種主策略(可能這裏沒有主題),但使用ServiceLoader(例如,CharsetDecoder)的任何內容都遵循策略模式方法。

編輯添加回複評論:我對「策略模式」的理解是,它是一個父對象,可以在執行時決定並注入特定的算法或算法。所以ServiceLoader本身不是一種策略模式,但通過採用策略模式的SPI來促進JDK和其他應用程序的許多領域。

但也許我讓它太難了。基本上,Collections.sort(List, Comparator)和任何帶有Comparator構造函數參數的排序集合(例如,new TreeSet(Comparator)也是例子。爲什麼?因爲在執行時,任何合適的比較器都可以提交給sort()或構造函數以改變行爲。通常情況下,在戰略模式中,可以在執行時選擇一些實現 - 例如,可以通過增加/減少日期,主題或來自地址的順序對電子郵件表進行排序。其中每個將有一個相關的Comparator

+0

hm,但是你可以向我解釋ServiceLoader如何表述爲策略模式? – pikk 2011-03-28 21:45:48