2011-10-26 46 views
1

由於封裝被認爲比繼承更好(根據Effective Java和其他來源),因此存在轉發對象的模式。 (我相信Decorator模式是它的一個同義詞,但請不要對我大喊如果我錯了!)有沒有一種方法來實現Java中的轉發對象模式沒有樣板代碼?

基本上,你寫這樣的代碼:

class public ForwardSomething extends Something { 
    private Something something=new Something(); 
    public void somethingMethod1(){return something.somethingMethod1();} 
    public void somethingMethod2(){return something.somethingMethod2();} 
    /*Do same for the methods for all methods of Something that exist when you wrote  Forward Something.*/ 
} 

所以有很多的樣板代碼。我們都知道「不要重複自己」是理想的。有沒有解決這個問題的好方法,不涉及樣板代碼?

+0

(若延續的東西,你已經擁有了方法 - 合成子類的目的是什麼?你的意思是implements和一個新的SomethingImpl,而不是你在這裏編寫的東西?) –

回答

2

有了接口,你可以使用一個dynamic proxy class或具體類,你可以做一些權謀像cglib動態寫入字節碼新的子類(或類似像asm

+0

當項目已經存在時,我不會推薦homespun字節碼背叛。 –

4

TL; DR:不,不平凡。這是Java。

大多數IDE可以自動執行此操作。我使用了「樣板基類」來避免當我做了很多事情時會污染那些實際工作的代碼。不過,你可以使用Lombok's@Delegate (docs)

相關問題