ОО проблема дизайна - PullRequest
1 голос
/ 25 июля 2011

Предположим, есть 2 класса: A и B.

A могут работать на B.

Мне нужно иметь возможность запрашивать все B экземплярычто A оперировал.

И для конкретного экземпляра B мне нужно иметь возможность запрашивать все A экземпляры, которые оперировали с ним.

Что элегантно(во вкус ОО ..) решение для такого рода проблемы?

Ответы [ 2 ]

1 голос
/ 25 июля 2011

На таком языке, как 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;
    }
}

Это действительно ничего особенного, кроме использования доступа к пакету , чтобы разрешить A доступ к B методу startRecoveringFromOperation(), скрывая метод от большинства других классов. В других языках вы можете использовать другой подход для достижения этой цели. Например, в C ++ вы можете объявить A как friend из B.

0 голосов
/ 25 июля 2011
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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...