這裏就是我想要做的,我不知道要尋找什麼,或者什麼設計正確的方法是:設計模式爲動態繼承
我正在一個異常層次結構的應用。作爲其中的一部分,有一些例外有時會致命,其他時間是可以恢復的 - 無論是特定的實例是致命的還是可恢復的,都是在異常本身的運行時確定的。對於組織的目的,我希望能夠像做(我在python工作):
try:
mightThrowAnException()
except RecoverableException:
handleThisException()
然後我會碰到這樣的:
class MyException(...):
...
凡MyException既可以根據構造函數中發生的情況,將FatalException或RecoverableException作爲基類。
我知道我可以有兩個單獨的異常MyFatalException
和MyRecoverableException
再提高一個或有其他的代碼,但有將是一個很大的不同異常的不同類型的錯誤,它可以從多個地方被上調代碼和異常必須做一些事情,比如檢查錯誤日誌以確定這個實例是否應該是致命的,所以我認爲將所有這些代碼放入異常處理程序本身是有意義的。
那麼幾個問題:
- 鑑於我想要做什麼,這是一個很好的方式去了解它,或者是有這樣的事情更好的設計?
- 我讀過關於類工廠,但我沒有看到用這種方法動態更改基類的簡單方法,我考慮的其他事情是元類或重寫刪除方法
__new__()
,我不是真的確定這三種方法各有利弊。這些都是正確的方法還是我需要別的東西?
嗯。您比我更瞭解您的特定需求,但是對於捕獲異常以確定其是否致命的代碼,在逐案的基礎上進行更合理嗎?除了日誌以外,你甚至可以處理一個致命的異常?雖然 – Cameron 2011-04-09 04:14:16
我懷疑我已經處理了幾年前Jesse在Java項目中描述的類似問題,但總的問題仍然很有趣,它是我們應用程序的電子郵件網關。事實之後添加了很多錯誤處理和恢復。由於存在各種可能的(通常是泛型的)異常類型,我們最終將它們歸類爲RetryableException和FastFailException,並且只是將發生的任何錯誤都包裝進去,而不是將該異常聲明爲拋出異常。它成功了, Java的檢查異常使它有點複雜。 – 2011-04-09 04:49:56