繁体   English   中英

Java-特定对象上方法的侦听器

[英]Java - Listener for a method on a specific object

是否可以为特定对象上的方法创建侦听器。

对象A创建对象B。对象A想知道何时调用B.drive(),但不关心何时调用对象C(与B相同的类)C.drive()。

是的,通常使用侦听器模式来侦听特定对象。 因此,在对象B和C的类中创建setListener(SomeClassListener listener)方法,并在类的方法drive中检查是否设置了侦听drive ,如果是,则从侦听器运行方法。

据我了解,您的情况A对象实现了Factory模式-它创建对象,因此对象A也应该是Listener,并且在创建对象B时调用b.setListener(a) ,而在创建对象C时不要调用此方法。

最终,如果创建应该在对象A(应该是!)内部,则在对象A的类中创建带有参数的工厂方法:

SomeClass createObj(boolean setListener){

     SomeClass obj=new SomeClass();
     if (setListener){

        obj.setListener(this);
     }

     return obj;
}

因此,对于对象B的创建将如下所示:

SomeClass b=a.createObj(true);

对于对象C(不监听)

SomeClass c=a.createObj();

这是侦听器模式的一个简单示例。

public class ObjectA implements DriveListener {

    //defined in interface DriveListener
    @Override
    public void onDrive(ObjectB source){
        doSomething();
    }

    // a simple factory creating ObjectB instances
    public ObjectB makeB(){
        ObjectB b = new ObjectB();
        b.setListener(this);
        return b;
    }

}

public class ObjectB {

    private DriveListener driveListener;

    public void setListener(DriveListener l){
        this.driveListener = l;
    }

    public void drive() {
        //do something...

        //notify the listener if any.
        if(driverListener!=null){
            driverListener.onDrive(this);
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM