Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

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.