특정 오브젝트에 대한 메소드에 대한 리스너를 작성할 수 있습니까?Java - 특정 오브젝트에 대한 메소드의 리스너
개체 A는 개체 B를 만듭니다. 개체 A는 B.drive()가 호출되면 알기를 원하지만 개체 C (B와 동일한 클래스) C.drive()가 호출되는시기는 신경 쓰지 않습니다.
특정 오브젝트에 대한 메소드에 대한 리스너를 작성할 수 있습니까?Java - 특정 오브젝트에 대한 메소드의 리스너
개체 A는 개체 B를 만듭니다. 개체 A는 B.drive()가 호출되면 알기를 원하지만 개체 C (B와 동일한 클래스) C.drive()가 호출되는시기는 신경 쓰지 않습니다.
예, 리스너 패턴의 tipical 사용은 특정 객체를 듣고 있습니다. 그래서 객체 B와 C 메소드 setListener(SomeClassListener listener)
의 클래스와 클래스 검사의 drive
에서 리스너가 설정되었는지, 리스너가있는 경우 메소드를 실행하십시오.
내가 당신의 상황을 이해 같은 개체 공장 패턴을 구현 - 그것은 개체를 만듭니다, 그래서 A는 또한 리스너해야 객체와이 객체를 생성 객체 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();
다음은 리스너 p의 간단한 예입니다 attern.
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);
}
}
}
물론 가능합니다. Observer 패턴을 사용 하시겠습니까? –
ID를 사용하여 각 개체를 식별하고 ID를 기반으로 결정할 수 있습니다 –
컨테이너를 사용하는 경우 [AOP] (https://en.wikipedia.org/wiki/Aspect-oriented_programming)를 사용하여 해결할 수 있습니다 그 문제. – Rodolfo