2013-02-26 82 views
1

我有一個頂級類,讓我們說學校。面向對象的工廠方法vs構造函數

還有一些延伸學校課程的課程。

通常情況下,如果我只好打電話給孩子的一個類,我會用:

new Math('aaa'),或者new English(array('foo'));

每個孩子的班級都有不同的參數。現在

,什麼是更好的:

1)在學校類創建工廠方法,所以:

School::Factory('aaa')將返回基於給定參數Math('aaa')類工廠()方法

2)或者直接調用每個孩子類?

編輯:我只有兩個子類,我的問題是我不知道這樣做是否值得生產代碼中的一點簡單。我只需檢查傳遞給Factory方法的參數,並根據這些信息調用這兩個類中的一個。你怎麼看?

一方面我可以寫出更簡單的代碼。另一方面,每次我需要添加新的子類時(儘管這樣做的可能性很小),但我還需要更改Factory()方法,所以我在此有一個依賴關係。

+0

我不認爲一般建議可以在這個問題上,你總是需要考慮你的組件的具體結構。 – Niko 2013-02-26 13:58:35

+0

已編輯,現在就去查看 – khernik 2013-02-26 14:00:23

+0

什麼是負號?一個更好的設計決策的機會值得問這個問題:P – khernik 2013-02-26 14:18:48

回答

0

1)在學校類創建工廠方法,所以:

你說你有延長學校2班。因此,學校不應該充當工廠。父類不應該知道任何有關它的子/子類的信息。

2)或者直接調用每個子類?

或者你可以有一個 「CourseFactory」 或 「LectureFactory」 與createMath(aaa),例如。或者根據情況,也許createLecture("math")

然而,這沒有任何意義在你的例子是數學或英語延長學校(除非你的意思是MathSchool和EnglishSchool,但我也理解MathCourse和EnglishCourse)

相關問題