[英]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.