作者PsMonkey (痞子军团团长)
看板java
标题Re: [问题] 将callback转型成原本的class
时间Mon Oct 14 14:45:15 2013
※ 引述《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
1F:→ Chikei:jdk没有没关系我们有方便的google芭乐(?) r10以後就有了 10/14 15:01