1

我弄乱了一些模式,以使代码更加模块化。所以我有这样的事情:

class A implements ICallback {
     MyObject o;
     B b = new B(this, someParameter);

     @Override
     public void callback(MyObject o){
           this.o = o;
     }
}

class B {
     ICallback ic;
     B(ICallback ic, someParameter){
         this.ic = ic;
     }

    new Thread(new Runnable(){
         public void run(){
             // some calculation
             ic.callback(myObject)
         }
    }).start(); 
}

interface ICallback(){
    public void callback(MyObject o);
}

我必须等待MyObjectin A,所以我使用callback来通知inA的工作是否完成。但现在我必须将所有逻辑处理和进一步处理放在.ThreadBMyObjectcallback

我可以以某种方式避免这种情况还是正确的方法?

4

1 回答 1

2

您的方法基本上是合理的,但class A可能不应该自行实现ICallback。更典型、更灵活的方案是将匿名回调实现的实例传递到B.

另请注意,回调的所有处理都将在B.

callback与上述观察相关的是您对进行所有处理的疑虑的答案MyObject:基本上没有其他方法可以做到这一点,因为提供的动作MyObject是由B' 线程启动的,并且控制只能从该方法向外流动。如果您希望处理跳转到主线程,您将需要一个涉及阻塞队列的更复杂的方案。

于 2013-05-30T11:27:55.297 回答