2013-06-05 125 views
-1

假設我有一個應用程序x,它經常更新,我需要用我的包y修改這個應用程序。爲了得到我的包,y,運行我修改了x中的一個主類(是否有更好的方法來做到這一點?)。在此之後,我嘗試儘可能少地進行修改。我這樣做是因爲當x更新時,我可以輕鬆地複製我的修改,將呼叫添加到y,然後離開我們。覆蓋類

現在我遇到了一個問題,我需要修改x的字體渲染器來使用更好的ttf字體,這將使entale修改x中的整個類。

有沒有什麼辦法可以重寫一個類在y中的x,而不需要在x中引用y?我想在X刪除整個類並用替換它延伸,但會提出額外的壓力,我的頭時,x被更新,提前

感謝, 喬丹

+3

你可以把你的代碼簡化爲一個簡短的例子嗎?我不知道你現在在說什麼...... – jlordo

+0

我需要替換一個類讓我們把這個A叫做B類而沒有在A中引用B @jlordo –

+1

我不確定'A'和'B'是什麼比'x'和'y'更清晰。 – GriffeyDog

回答

0

你做的東西沿着此線:

public class x{ some schtuff} 

那麼你這樣做:

Public class y extends x { other stuff} 

希望這會有所幫助,我的兒子有同樣的問題!

3

你已經用非常一般的術語描述了你的問題,所以我只能一般地回答。你應該看看各種結構模式。 facade pattern旨在將程序的一部分(程序包y)中的代碼與另一程序(程序包x)中的更改隔離。對x的許多更改,只需更新外觀,而包y中的其他內容都需要更改。

相關模式是adapter patterndecorator pattern

鑑於你所描述的,我建議避免子類。它創造了更多的依賴,而不是聽起來像你想要的。

+0

有什麼方法可以在不初始化的情況下重寫該類嗎?我相信使用一個外觀非常接近我所需要的,但它需要很多編輯基礎包。 –

+0

@JordanDoyle - 外觀模式的想法是,你根本不需要修改後臺代碼(包x)。 (或者你說的是修改包y?)當你重寫一個類時,總是調用基類構造函數(顯式或隱式)作爲執行派生類的每個構造函數的第一步。所以,如果我理解你的問題:不,沒有辦法在沒有初始化它的情況下重寫一個類。門面模式也可以幫助你:當你需要初始化類成員時,你可以推遲初始化。 –

+0

包X是原始的後臺代碼,它已經有了外觀,我的代碼稍後會在腳本執行中被調用,但支持代碼的工作方式是它將我需要覆蓋的類作爲參數傳遞給其他類,我的包被稱爲太晚了 –