Abstract Factory Design Pattern

mahi
Mausschubser
Mausschubser
Beiträge: 55
Registriert: 5. Aug 2012 14:06

Abstract Factory Design Pattern

Beitrag von mahi »

Was ist mit "Austausch von Produktfamilien ist einfach" explizit gemeint? Etwa dass man in Laufzeit ein Produkt ändern kann, sprich

AbstractProductB a=new createProdA();

dann könnte ich a ersetzen mit einer anderen Instanz (in Laufzeit) deren Klasse die Interface AbstractProductB implementiert. Was genau ist mit "Familien austauschen" gemeint?!

Gruß

genix
Windoof-User
Windoof-User
Beiträge: 39
Registriert: 16. Okt 2010 13:41

Re: Abstract Factory Design Pattern

Beitrag von genix »

Hi,

nehmen wir man das Beispiel einer Datenbankverbindung:

Code: Alles auswählen

public interface AbstractDatabaseFactory {
    public DatabaseQuery createQuery(String query);
}

public class MySQLDatabase implements AbstractDatabaseFactory {
    public DatabaseQuery createQuery(String query){
         return new MySQLQuery(query);
   }
}

public class OtherDatabase implements AbstractDatabaseFactory {
    public DatabaseQuery createQuery(String query){
        return new OtherQuery(query);
   }
}

public interface DatabaseQuery {
    public boolean execute();
}

public class MySQLQuery implements DatabaseQuery {
    public MySQLQuery(String query){}
    public boolean execute(){
        // execute query
        return true;
    }
}

public class OtherQuery implements DatabaseQuery {
    public OtherQuery(String query){}
    public boolean execute(){
        return true;
    }
}

public class Client {
    public static void main(String[] args){
        // create mysql first
        AbstractDatabaseFactory database = new MySQLDatabase();
        DatabaseQuery query = database.createQuery("SHOW TABLES");
        query.execute();

        //exchange database with OtherDatabase
        database = new OtherDatabase();
        query = database.createQuery("SHOW TABLES");
        query.execute();
    }
}
In dem Beispiel habe ich nun das gesamte Verhalten von Query (MySQLQuery könnte intern komplett andere Sachen machen als OtherQuery) und Datenbank mit dem Austausch der Factory geändert. Also durch den Austauch von MySQLDatabase durch OtherDatabase habe ich eine ganze Produktfamilie ausgetauscht.

Ich hoffe es haben sich keine Fehler eingeschlichen.

Grüße.

Edit: interfaces statt abstract classes
Zuletzt geändert von genix am 26. Feb 2013 20:29, insgesamt 2-mal geändert.

hy57muxu
Erstie
Erstie
Beiträge: 17
Registriert: 31. Okt 2011 23:22

Re: Abstract Factory Design Pattern

Beitrag von hy57muxu »

An sich ists richtig, allerdings müssen deine abstracten Classen nicht abstract sein, sondern interfaces.
Auch wenn es verwirrend ist, weils abstract factory heißt, ich habe bei der Übung Punktabzug bekommen, weil ich die abstract hatte.
Ist halt doof, wenn man nen Constructor braucht, weil den kann man im Interface nicht berücksichtigen.
Bei mir bekommt ihr die beste Marmelade die ihr je gegessen habt...

genix
Windoof-User
Windoof-User
Beiträge: 39
Registriert: 16. Okt 2010 13:41

Re: Abstract Factory Design Pattern

Beitrag von genix »

Hi,

danke für den Hinweis, ist verbessert, hab mich da wohl vom Namen in die Irre führen lassen :)

errt
Mausschubser
Mausschubser
Beiträge: 61
Registriert: 18. Okt 2012 19:12

Re: Abstract Factory Design Pattern

Beitrag von errt »

hy57muxu hat geschrieben:An sich ists richtig, allerdings müssen deine abstracten Classen nicht abstract sein, sondern interfaces.
Auch wenn es verwirrend ist, weils abstract factory heißt, ich habe bei der Übung Punktabzug bekommen, weil ich die abstract hatte.
Finde ich ein bisschen seltsam. Schließlich sind die Patterns ja sprachunabhängig definiert, im GoF in erster Linie für C++. Und interfaces sind ja nun eine Java-Besonderheit, die im Endeffekt ja auch nichts anderes als abstrakte Klassen darstellen, mit ein paar zusätzlichen Beschränkungen eben.

genix
Windoof-User
Windoof-User
Beiträge: 39
Registriert: 16. Okt 2010 13:41

Re: Abstract Factory Design Pattern

Beitrag von genix »

Ja, laut wikipedia scheint das auch richtig zu sein, aber ich will da dann lieber doch nicht vom Gesagten in der Vorlesung abweichen...

mahi
Mausschubser
Mausschubser
Beiträge: 55
Registriert: 5. Aug 2012 14:06

Re: Abstract Factory Design Pattern

Beitrag von mahi »

Super Beispiel, Danke ;- )

Antworten

Zurück zu „Archiv“