2016-08-23 56 views
-1

我有一組輸入,並且有不同的方法可以接受這些輸入並在一次課中完成不同的任務。我應該在這裏使用工廠模式,因爲方法簽名是相同的,並創建實現不同的不同類?案件數量相當大,工廠模式是個好主意?在JAVA中使用什麼樣的設計模式?

例如,我有一個文件類型的開關,並且有近20種類型的文件類型,所以有20個開關情況。看看下面的例子2這樣的情況下,我有這樣的情況下,20 +

switch(fileType) { 
       case SIMPLE_FILE: 
        processSIMPLEData(stepInput, stepOutput,ackFilePath, errorFilePath); 
       break; 
       case MUL_FILE: 
        processMULData(stepInput, stepOutput,ackFilePath, errorFilePath); 
       break; 

....

+0

你的域對象和一些代碼的一個簡短例子會有幫助。 –

+0

我已更新問題陳述,請看看。 – PRASANTA

+0

@PRASANTA看看[策略模式](http://www.dofactory.com/net/strategy-design-pattern)。雖然這個問題更適合程序員.stackexchange。 –

回答

0

是使用工廠模式。 以上地圖文件類型文件類型處理程序會有意義。看到許多參數,這是一種「代碼味道」,因爲這些參數必須在某種程度上隨處處理,所以最好將其卸載到參數類或構建器模式中(可以在不存在的功能參數化時發出警報)。

+0

謝謝你的回覆,是的將參數卸載到參數類是一個很好的建議。但我擔心的是,如果我爲所有這些20多個用例編寫工廠模式,還可以添加更多的用例,我需要編寫20個以上的類來編寫實際的實現。那裏有任何建議? – PRASANTA

+0

一個好的基類。但是,如果你有這麼多的情況,用商業邏輯來說,if語句豐盛,那麼聲明性定義就很棒。說XML。 「過程...」是一個九口之家。所以我無法判斷這種情況。重構可以增量完成。 –

0

我不確定你想要解決什麼問題。設計模式的動機和適用性,你的問題沒有回答這個問題,因爲它缺乏上下文。你想解決什麼問題?

從上面的代碼看來,您的處理功能似乎取決於文件類型。一個簡單的選擇是爲文件類型創建一個類層次結構,並添加一個覆蓋不同文件類型的方法進程。爲了創建,你需要在文件類型和類之間進行映射。這可能是一個工廠,但工廠解決了另一個問題,即用戶可以在不知道具體類型的情況下創建對象。因此,不要編寫File f = new SpecificFileType(),而是從工廠查詢新實例,並獲取您不知道和關心的某種類型的對象。

如果您有文件類型的層次結構,並且希望能夠通過對文件進行操作來擴展它,那麼您應該查看Visitor。

+0

目前相同的簽名被不同的方法使用,他們都做不同的東西,我的問題是「這是正確的方式」,或者我應該有更好的方法嗎? – PRASANTA

+0

只有「相同的簽名被不同的方法使用,他們都做不同的東西」,我只能說與文件類型的類層次結構一起去了。設計模式可以在不同的層面上解決問題,如果沒有進一步的上下文,很難提供建議。 – Jens