簡體   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