Ich bin dabei mich auf Java einzulassen (ansonsten reichte mir C++), doch die Sache (der Sinn!?) mit diesen 'Interfaces' ist mir noch unklar,
ganz abgesehen von der Design-Pattern-Thematik :autsch:
(Ppuuuuh, warum einfach, wenn's auch kompliziert geht)....
Nun meine Frage:
Interfaces und Abstrakte Klassen sind ganz nützlich, um Clienten dazu zu zwingen Methoden zu implementieren.
In dem Buch "Effektiv Java prog..." :###
heißt es, man solle statische Factory-Methoden statt Konstruktoren verwenden.
Doch wie sage ich entweder
- einer abstrakten Basisklasse, dass die statische "GetInstance"-Methode ein Object, der jeweils
abgeleiteten Klasse zurückgeben soll ???:L ?
oder wie
- schreibe ich ein Interface/Abstrakte Klasse, welches dem Clienten vorschreibt, er müsse noch
die statische "GetInstance"-Methode implementieren oder überschreiben ???:L ?
Beispiel:
Wenn hierbei z.B. vergessen wird, in 'ConcreteModel' die getInstance() der Basisklasse zu überschreiben,
dann wird natürlich 'null' geliefert, was ja nicht gerade erwünscht ist.
Abstrakte Basisklasse sind doch eigendlich ideal, um die globalen, statischen Klassenmethoden aufzunehmen,
so klappt das aber irgendwie nicht (Objekt-Rückgabe??)...
...hat da irgendjemand eine ELEGANTE & professionelle Lösung :bahnhof: ??
MfG
stern-wf
ganz abgesehen von der Design-Pattern-Thematik :autsch:
(Ppuuuuh, warum einfach, wenn's auch kompliziert geht)....
Nun meine Frage:
Interfaces und Abstrakte Klassen sind ganz nützlich, um Clienten dazu zu zwingen Methoden zu implementieren.
In dem Buch "Effektiv Java prog..." :###
heißt es, man solle statische Factory-Methoden statt Konstruktoren verwenden.
Doch wie sage ich entweder
- einer abstrakten Basisklasse, dass die statische "GetInstance"-Methode ein Object, der jeweils
abgeleiteten Klasse zurückgeben soll ???:L ?
oder wie
- schreibe ich ein Interface/Abstrakte Klasse, welches dem Clienten vorschreibt, er müsse noch
die statische "GetInstance"-Methode implementieren oder überschreiben ???:L ?
Beispiel:
Code:
public interface IModel {
public int getIntField();
public void modify(int value);
}
public abstract class AbstractModel implements IModel {
private int intField = 0;
public int getIntField() { return intField; }
public void modify(int value) {
if (value <= Integer.MAX_VALUE && value >= Integer.MIN_VALUE)
this.intField += value;
}
public static Object getInstance() { return null; }
}
public class ConcreteModel extends AbstractModel
{
private ConcreteModel() {}
public static Object getInstance() { return new ConcreteModel(); }
}
public class UiTest01
{
private UiTest01() {}
public static void main(String[] args) {
UiTest01 App = new UiTest01();
ConcreteModel Data = (ConcreteModel) ConcreteModel.getInstance();
ConcreteView UserInterface = (ConcreteView) ConcreteView.getInstance();
if (!UserInterface.init( Data ))
System.out.println("Fehler in Klasse \"View\"!");
else UserInterface.update();
}
}
Wenn hierbei z.B. vergessen wird, in 'ConcreteModel' die getInstance() der Basisklasse zu überschreiben,
dann wird natürlich 'null' geliefert, was ja nicht gerade erwünscht ist.
Abstrakte Basisklasse sind doch eigendlich ideal, um die globalen, statischen Klassenmethoden aufzunehmen,
so klappt das aber irgendwie nicht (Objekt-Rückgabe??)...
...hat da irgendjemand eine ELEGANTE & professionelle Lösung :bahnhof: ??
MfG
stern-wf