是否可以为特定对象上的方法创建侦听器。
对象A创建对象B.对象A想要知道何时调用B.drive(),但不关心何时调用对象C(与B相同的类)C.drive()。
答案 0 :(得分:1)
是的,倾听使用侦听器模式正在侦听特定对象。因此,在对象B和C方法setListener(SomeClassListener listener)
的类中创建,并在类的方法drive
中检查是否设置了侦听器,如果是,则从侦听器运行方法。
据我了解你的情况一个对象实现了Factory模式 - 它创建了对象,所以对象A也应该是 Listener ,当它创建对象B时调用b.setListener(a)
,当创建对象C时没有叫这个方法。
最终如果创建应该在对象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();
答案 1 :(得分:0)
以下是侦听器模式的一个简单示例。
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);
}
}
}