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 benötige in meinem Projekt an verschiedenen Stellen verschiedene Comparator.
Meine Idee ist nun, sämtliche Komparatoren in eine Klasse Comparators auszulagern.
Die würde als Singleton implementiert wiefolgt aussehen:
Code:
package webPCS.technical;
import java.util.ArrayList;
import java.util.Comparator;
/**
* zentrale Klasse zur Bereitstellung von Komparatoren
* @author cpieper
*
*/
public class Comparators {
// Singleton-Initialisierung
private static Comparators komparatoren = new Comparators();
/**
* vergleicht zwei Mitarbeiter-ArrayLists an Hand des Nachnamens und des Vornamens aufsteigend.
*/
public class MitarbeiterComparator implements Comparator<ArrayList>{
public int compare(ArrayList m1, ArrayList m2){
return (m1.get(2).toString()).compareTo(m2.get(2).toString());
}
}
// weitere Komparatoren ergänzen
private Comparators() {
super();
}
public static Comparators getInstance() {
return komparatoren;
}
}
Und nun die Frage, wie hole ich mir in einer Klasse die einzige Instanz von Comparators, und wie greife ich auf die jeweilige Comparator-Implementierung zu?
public class Comparators {
// Singleton-Initialisierung
private static Comparators komparatoren = new Comparators();
private MitarbeiterComparator mitarbeiterComp = null;
/**
* vergleicht zwei Mitarbeiter-ArrayLists an Hand des Nachnamens und des Vornamens aufsteigend.
*/
public class MitarbeiterComparator implements Comparator<ArrayList>{
public int compare(ArrayList m1, ArrayList m2){
return (m1.get(2).toString()).compareTo(m2.get(2).toString());
}
}
// weitere Komparatoren ergänzen
private Comparators() {
super();
mitarbeiterComp = new MitarbetierComparator();
}
public Comparator getMitarbeiterComparator(){
return mitarbeiterComp;
}
public static Comparators getInstance() {
return komparatoren;
}
}
warum so umständlich, wenn ich eine Comperator brauche, dann instanzier ich ihn mir.
new MitarbeiterComparator(); aus fertig, warum eine factory, warum ein singleton?
der comperator beinhaltet keine daten die ich wo anders wieder brauche.
wenn ich an zwei verschiedene stellen den selben comperator brauch, instazier ich mir halt an den beiden stellen den comperator, muss ja nicht das gleiche objekt sein.
wenn ich an zwei verschiedene stellen den selben comperator brauch, instazier ich mir halt an den beiden stellen den comperator, muss ja nicht das gleiche objekt sein.
.. und schon hast du redundanten Code, ändest du eine Stelle, musst du nach weiteren Suchen... wenn du jetzt 5 Comperatoren hast welche jeweils 3mal benutzt werden, ist das schlecht.
Mit der Factory (ohne Singleton, wozu denn auch?) hast du alles an einer Stelle, und viel mehr Code ist das sicherlich nicht.