Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Ich möchte eine kombinierte Klasse erzeugen. Also hier mal ein Pseudocode Beispiel:
Code:
class Basis {
String meineBasisData;
}
class Editierbar {
Boolean editierbar;
public boolean editierbar { return editierbar; }
public void edit();
}
class Veroeffentlicht {
Boolean veroeffentlicht;
public boolean veroeffentlicht { return veroeffentlicht; }
public boolean veroeffentlichen { }
}
class Ordnung {
int Ordnung;
public void move( richtung : int ) { ... ];
public void reorder() { ... };
}
class main {
main() {
editierbaresObject = new EditObject() : Base, Editierbar;
editierbaresObject.editierbar();
editierbaresObject.edit();
editierbaresveroeffentlichsObject = new EditVeroeffentlichtlichesObject() : Base, Editierbar, Veroeffentlicht;
editierbaresveroeffentlichsObject.edit();
editierbaresveroeffentlichsObject.veroeffentlichen();
veroeffentlichsgeordnetesObject = new EditVeroeffentlichtlichesObject() : Base, Veroeffentlicht, Ordnung;
veroeffentlichsgeordnetesObject.veröffentlichen();
veroeffentlichsgeordnetesObject.reorder();
editierbaresgeordnetesObject = new EditVeroeffentlichtlichesObject() : Base, Editierbar, Ordnung;
veroeffentlichsgeordnetesObject.edit();
veroeffentlichsgeordnetesObject.reorder();
}
}
Mir ist schon klar das man Mehrfachvererbung über Interfaces löst, aber bei Interfaces muss man in jeder beliebig zusammengestellten Klasse alle Funktionen >neu< definieren.
Ich suche eine Möglichkeit, das ich eine Klasse definiere und hierzu beliebige Funktion und Attribute, die ich einmal definiert habe, für alle Kombinationsmöglichkeiten hinzufügen könnte.
Kannst ja richtung Decorator oder Adapter schauen. Aber ich würde noch mal über die Aufteilung nachdenken: editierbar und veröffentlicht lassen sich ja noch unter einen Hut bringen, aber "Ordnung" bezieht sich irgendwie nicht auf ein Objekt, sondern auf eine Menge von Objekten.
Schreib dir eine Adapter-Klasse, die alle drei Interfaces implementiert. Im Konstruktor der Klasse gibst du an, welche Parameter für die jeweilige Instanz gelten sollen (editierbar, ...) und setzt diese entsprechend. Diese prüfst du dann einfach in den jeweiligen Funktionen (edit, ...) und führst die Operation ggf. aus.
Also etwa sowas:
Java:
class Adapter implements Base, Edittierbar, Veroeffentlicht, Ordnung {
boolean editierbar, veroeffentlicht;
int ordnung;
Adapter(params) {
// setze parameter
}
void edit() {
if (edit) { // do something;}
}
void veroeffentliche () {
if (!veroeffentlicht) { // do something;}
}
// wie das ganze mit der Ordnung aussieht, durchblicke ich grade nicht, musst du mal selbst drüber nachdenken...
}
class MyClass {
Adapter a = new Adapter("editierbar");
a.edit();
a.reorder(); // sollte dann eine Exception werfen, weil nicht möglich...
}