我有一個字段的對象。 在一個項目中,我需要這個充滿信息的對象。誰負責設置對象屬性?
誰的責任就是填補這個對象?
我想要一個方法,如getFilledObject(),它返回一個完整的填充對象到我的程序。
我可以把這個邏輯放入主流程中,並將其填充到「原地」,我也可以將此方法添加到類本身中,以便根據我傳遞的參數知道如何填充自身。 後一個決定是夠好的,唯一的問題是,這個類必須知道更多關於它的本質,而不是一個簡單的普通get-set類。
但我覺得既不是決定就夠了。它應該是什麼?只包含填充對象的邏輯的助手類?
你知道,是的,工廠就是我一直在尋找,但它總是與多態性一起提及。在我的情況下,我根本不需要它。所以我可以稱它爲工廠,但它真的會成爲他們所謂的「工廠模式」嗎?
那麼我們作爲結果有什麼? 第一,靜態工廠方法
class A { ObjType1 obj1; ObjType2 obj2; public A() {} public static getA(int param1, int param2) { A a = null; ObjType3 obj3 = null; if (somelib.complexCheck(param)) { obj3 = someotherlib.getSomething(param2); // other stuff } if (obj3 != null) { // do something with getters & setters, fill a } return a; }
和工廠模式或類似的東西給它
class Fact { public static A getA(int param1, int param2) { // do all that stuff here } }
在我看來,區別是很多在A級進口指令在靜態工廠方法的情況下,。另外,如果所有這些需要相同的庫,我們可以將類似的靜態方法放入Fact類中。
你會在兩者之間選擇什麼?
「問題是,這個類必須知道更多關於它的性質,而不是一個簡單的普通get-set類」這是一個「問題」?真?你在說什麼?如何 - 確切地說 - 這是一個問題嗎?這聽起來像是一個階級的基本定義:它在一個地方擁有所有的責任和知識。你在說什麼「問題」?你能澄清你的問題嗎? – 2009-12-16 14:10:51
好吧,讓我們說我必須檢查我正在尋找的對象是否在HttpSession中。如果是這樣,我可以檢查它是否正常或損壞。如果不存在,我必須查詢數據庫並構造一個複雜的對象,然後返回對其的引用。我覺得把getter/setter和解壓縮信息解耦,在這裏會更好。你怎麼看? – EugeneP 2009-12-16 14:13:28