Re: [問題] 將callback轉型成原本的class

看板java作者 (痞子軍團團長)時間11年前 (2013/10/14 14:45), 編輯推噓0(001)
留言1則, 1人參與, 最新討論串5/9 (看更多)
※ 引述《liu2007 (薯)》之銘言: : 我想要強調的是這個Class A 有public 的 getter & setter : 今天我預設之下把Class A 的instance pointer 給某個Class B 使用是允許的。 : 可是很不巧某個Class C 也會用到 Class A 的某些public method 或是額外的東西, : 只不過這個Class C 我不希望他會去使用到Class A 的 getter & setter,也就是說我不 : 希望Class C 透過 getter & setter動到我 Class A 的某些東西。 : 我過去要完成這樣的想發都是先寫一個 interface : public interface SpecialCallback{ : public void doSomethingSpecial(); : } : 然後 : public class A implements SpecialCallback{ : //略 : } : 在 Class C 裡面藏一個 field : public class C { : private SpecialCallback mCallback; : public C (SpecialCallback callback){ : this.mCallback = callback; : } : public void method(){ : . : . : mCallback.doSomethingSpecial(); : . : . : } : } : 然後 new C的時候把 A 的instance pointer帶進去 ^^^^^^^^ 就說沒有指標了 我後來很害怕這種 reference 傳來傳去的,算是一種強迫症吧 雖然很多時候很直白好用 XD 後來就用... ㄟ... 我不知道這有沒有 pattern 名稱 還是叫做 event-driven 還是三小... 隨便啦 在 GWT 當中,有個東西叫做 event bus 簡單地說,就是你上頭的 doSomethingSpecial() 改成 //somewhere... public static HandlerManager eventBus = new HandlerManager(null); //在 method() 中 eventBus.fireEvent(new SomethingSpecialEvent()); 然後 A 裡頭就 eventBus.addSomethingSpecialHandler( new SomethingSpecialHandler() { onFire() { this.doSomethingSpecial(); } } } 你看,這樣是不是很快樂呢? 程式碼足足多了五六倍,因為上頭還沒有宣告 __Event 跟 __Handler 超華麗的呢...... 而且我不知道 JDK 有沒有內建這類機制的 class 可以用 \囧/ 這一定可以解決你的問題 雖然他真正的目標(應該)並不是解決你的問題 [逃] -- 錢鍾書: 說出來的話 http://www.psmonkey.org 比不上不說出來的話 Java 版 cookcomic 版 只影射著說不出來的話 and more...... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.25.17.110

10/14 15:01, , 1F
jdk沒有沒關係我們有方便的google芭樂(?) r10以後就有了
10/14 15:01, 1F
文章代碼(AID): #1IMvBzpm (java)
討論串 (同標題文章)
文章代碼(AID): #1IMvBzpm (java)