2014-01-11 14 views
0

我正在研究一個基本的「購物車」模型的練習。我在CSV文件中列出了與價格配對的產品清單,我希望這個小程序對於此清單具有高度的靈活性;我計劃在啓動時將列表讀入集合中,以便程序在每次運行時都保持最新。如何將Java反射與Java工廠結合以生成類文件

我正在圍繞如何處理我的產品。我想到的一個想法是隻有一個帶有名稱和價格字段的Product類,並且在讀取列表時,只需使用適當的信息創建一個新的Product對象並將其推送到集合中即可。然後我會重寫hashCode()和equals()方法,以便具有相同名稱的產品是等價的,並且它們的價格無關緊要(如果我實現了比較不同商店中產品價格的某些功能)。

但是,我有另一個想法對我更加吸引,因爲它涉及到我沒有經驗的Java領域,即反射。我想過讓Product成爲一個抽象類,然後創建一個工廠來爲CSV列表中的每個產品生成相應的實現類。但我想更進一步:因爲目前每種產品的結構都是相同的(即相同的領域和方法),所以我想讓工廠實際上爲新產品生成新類。例如,在程序的第一次運行中,它會在實例化CSV文件並將它們推入集合中之前爲CSV文件中的每個產品生成一個抽象Product類的新實現,然後在第二次運行時(假設CSV文件具有沒有被修改)只會實例化和收集,因爲每個產品的類都已經存在。但是,如果列表中有新產品,它會爲該產品生成一個類文件,並像其他文件一樣實例化它。相反,如果產品已從列表中刪除,那麼該類文件將被刪除。

我可能會嘗試這兩個,因爲這個項目僅僅是爲了個人成長,但我不知道如何去做第二種方法。任何建議或勸阻(反對它的理由)?

回答

0

我認爲你必須使用圖書館了Javassist:javassist

+0

你能告訴我們爲什麼這個圖書館是必要的嗎?那麼好呢?爲什麼比別人好?一般來說,只有鏈接的答案是不被接受的,並且通常是封閉的,因爲鏈接可以改變並且傾向於自我廣告。 –

2

我不想打擊你,它總是好的實驗,以改善的事情,但我看到你的想法一點點的關鍵。 我認爲你想要做的事情遠遠超出了購物車用例的範圍。現在不需要使用反射。但我認爲,使用工廠方法模式可能是合理的。我理解你對儘可能最通用的東西感興趣,但在我看來,爲每個產品生成全新的類是沒有意義的。

也許問自己這些問題:
爲特定產品開設新班級有什麼好處?
其他使用該產品處理此類的方法如何?
特定產品還有哪些獨特功能?