开发者

OO design problem

Suppose there's 2 classes : A and B.

A can operate on B.

I need to be able to query all B instances that A has operated o开发者_JAVA技巧n.

And for a specific B instance, I need to be able to query all A instances that have operated on it.

What's the elegant(in the OO taste..) solution for this kind of problem?


In a language like Java I would do something like:

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;
    }
}

This really isn't doing anything special, beyond using package access to allow A access to B's startRecoveringFromOperation() method while hiding the method from most other classes. In other languages you might use a different approach to accomplish this. For instance in C++ you might declare A as a friend of B instead.


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);
    }
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜