...
PlantUML Macro |
---|
class Rolle1Klasse {
}
class Rolle2Klasse {
}
Rolle1Klasse "rolle1 0:1" -- "rolle2 0:1" Rolle2Klasse: assosiasjon
|
| Code Block |
---|
| public class Rolle1Klasse {
private Rolle2Klasse rolle2;
public Rolle2Klasse getRolle2() {
return rolle2;
}
public void setRolle2(Rolle2Klasse rolle2) {
this.rolle2 = rolle2;
}
} |
| Code Block |
---|
| public class Rolle2Klasse {
private Rolle1Klasse rolle1;
public Rolle1Klasse getRolle1() {
return rolle1;
}
public void setRolle1(Rolle1Klasse rolle1) {
this.rolle1 = rolle1;
}
} |
|
For å sette opp en gjensidig kobling, så må en opprette ett objekt av hver type og kalle dere respektive set-metoder med det andre objektet som argument:
...
Code Block |
---|
// i Rolle1Klasse
public void setRolle2(Rolle2Klasse rolle2) {
// sjekk om koblingen er riktig allerede
if (this.rolle2 == rolle2) {
return;
}
// husk den gamle og sett den nye
Rolle2Klasse oldRolle2 = this.rolle2;
this.rolle2 = oldRolle2;
// hvis det var en kobling fra før, koble den andre fra
if (oldRolle2 != null) {
oldRolle2.setRolle1(null);
}
// hvis dette er en ny kobling, koble den andre til
if (this.rolle2 != null) {
this.rolle2.setRolle1(this);
}
} |
| Code Block |
---|
// i Rolle2Klasse
public void setRolle1(Rolle1Klasse rolle1) {
// sjekk om koblingen er riktig allerede
if (this.rolle1 == rolle1) {
return;
}
// husk den gamle og sett den nye
Rolle1Klasse oldRolle1 = this.rolle1;
this.rolle1 = oldRolle1;
// hvis det var en kobling fra før, koble den andre fra
if (oldRolle1 != null) {
oldRolle1.setRolle2(null);
}
// hvis dette er en ny kobling, koble den andre til
if (this.rolle1 != null) {
this.rolle1.setRolle2(this);
}
} |
|
De to set-metodene samarbeider på en måte om å gjøre tilstanden konsistent. Vi ser at koden er de to metodene er like, bortsett fra at rollene er byttet om. Merk at innkapslingen er ivaretatt ved at begge bruker den andres set-metode.