...
PlantUML Macro |
---|
class Rolle1Klasse {
}
class Rolle2Klasse {
}
Rolle1Klasse "rolle1 0:1" -- "rolle2 0:n" Rolle2Klasse: assosiasjon
|
| Code Block |
---|
| public class Rolle1Klasse {
private Collection<Rolle2Klasse> roller2 = new ArrayList<Rolle2Klasse>();
public void addRolle2(Rolle2Klasse rolle2) {
// unngå duplikat
if (! roller2.contains(rolle2)) {
this.roller2.add(rolle2);
}
}
public void removeRolle2(Rolle2Klasse rolle2) {
this.roller2.remove(rolle2);
}
} |
| Code Block |
---|
| public class Rolle2Klasse {
private Rolle1Klasse rolle1;
public Rolle1Klasse getRolle1() {
return rolle1;
}
public void setRolle1(Rolle1Klasse rolle1) {
this.rolle1 = rolle1;
}
} |
|
...
Code Block |
---|
// i Rolle1Klasse
public void addRolle2(Rolle2Klasse rolle2) {
// sjekk om koblingen er riktig allerede
if (this.roller2.contains(rolle2)) {
return;
}
this.roller2.add(rolle2);
// opprett koblingen tilbake, om nødvendig
if (rolle2.getRolle1() != this) {
rolle2.setRolle1(this);
}
}
public void removeRolle2(Rolle2Klasse rolle2) {
// sjekk om koblingen er riktig allerede
if (! this.roller2.contains(rolle2)) {
return;
}
this.roller2.remove(rolle2);
// fjern koblingen tilbake, om nødvendig
if (rolle2.getRolle1() == this) {
rolle2.setRolle1(null);
}
} |
| Code Block |
---|
// i Rolle2Klasse
public void setRolle1(Rolle1Klasse rolle1) {
// sjekk om koblingen er riktig allerede
if (this.rolle1 == rolle1) {
return;
}
// fjern den gamle koblingen, om nødvendig
if (this.rolle1 != null) {
this.rolle1.removeRolle2(this);
}
this.rolle1 = rolle1;
// opprett den nye koblingen, om nødvendig
if (this.rolle1 != null) {
this.rolle1.addRolle2(this);
}
} |
|
De to add- og set-metodene metoden 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-metodeinnkapslingsmetoder hos den andre.