假设有两个类:A
和B
。
A
可以在B
上运行。
我需要能够查询B
已经操作过的所有A
个实例。
对于特定的B
实例,我需要能够查询已在其上运行的所有A
个实例。
这种问题的优雅(在OO味道......)解决方案是什么?
答案 0 :(得分:1)
在像Java这样的语言中,我会做类似的事情:
package com.whatever.blah;
public class A {
private Set<B> patients = new HashSet<B>;
public void operateOn(B patient) {
patient.startRecoveringFromOperation(this);
patients.add(patient);
}
public List<B> getPatients() {
return patients;
}
}
public class B {
private Set<A> surgeons = new HashSet<A>;
//this has package access to `A` can access it but other classes can't
void startRecoveringFromOperation(A theSurgeon) {
surgeons.add(theSurgeon);
}
public List<A> getSurgeons() {
return surgeons;
}
}
除了使用package access允许A
访问B
的{{1}}方法,同时从大多数其他类中隐藏方法之外,这确实没有做任何特别的事情。在其他语言中,您可以使用不同的方法来实现此目的。例如,在C ++中,您可以将startRecoveringFromOperation()
声明为A
friend
。
答案 1 :(得分:0)
import java.util.*;
class A {
void operate(B b) {
operatedOn.add(b);
b.operatedOnBy.add(this);
}
final Set<B> operatedOn = new HashSet<B>();
}
class B {
final Set<A> operatedOnBy = new HashSet<A>();
}
public class Main {
public static void main(String[] args) {
A a=new A();
B b=new B();
a.operate(b);
System.out.println(a+" "+a.operatedOn);
System.out.println(b+" "+b.operatedOnBy);
}
}