[Java]Een factory met enum

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Write Down

Write Down

22/12/2012 18:46:53
Quote Anchor link
Hi,



Offtopic
Ja, ik weet het, is een tijdje geleden dat ik nog iets poste op PHPhulp. Mijn excuses daarvoor, klachten mag je sturen richting school.

[/small]

Ik ben voor school bezig met een applicatie in Java. Een deel hiervan gebruikt een database. Ik heb momenteel twee implementaties voorzien, eentje met een gewoon tekst-bestand en de andere implementatie gebruikt Postgresql.

Dit werkt allemaal prima, alleen wil ik nu via het Factory Pattern het gewenste type database laten instantiëren. Mijn eerste opzet was iets als volgt

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
package domain.database;
import domain.DomainException;

public class DatabaseFactory {
    public Database createDatabase(String type, String name) throws DatabaseException, DomainException {
        if(type.equals("TXT")) {
            return new FileDatabaseV2(name);
        }else if(type.equals("SQL")) {
            return new FileDatabaseV2(name);
        }else {
            throw new DomainException("Invalid type");
        }
    }
}


Alleen is dit niet zo erg netjes. Als ik straks een XML implementatie wil, dien ik mijn factory aan te passen. Daarom zat ik te denken om een enum te gebruiken. Dit heb ik echter nog nooit in deze combinatie gebruikt. Ik heb al wat voorbeeldjes proberen te vinden, maar ik kom er eerlijk gezegd niet uit.

Kan iemand mij op weg helpen?

Mvg,
Write Down

Prettige feesten aan iedereen toegewenst!
 
PHP hulp

PHP hulp

05/02/2023 05:53:23
 
Jurgen B

Jurgen B

23/12/2012 00:05:14
Quote Anchor link
Je kan eens kijken naar Class.forName()... Je zal een beetje moeten refactoren maar je factory wordt een stuk flexibeler met oog op de toekomst.
 
Moose -

Moose -

23/12/2012 14:14:43
Quote Anchor link
Zou opzich met Class.forName kunnen, maar ook met een enum:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
enum DatabaseType {
    MYSQL(MySQLDatabase.class),
    POSTGRES(PostgresDatabase.class)

    private IDatabase db;

    private DatabaseTypes(IDatabase db) {
        this.db = db;
    }

    public IDatabase getDB() {
        return db;
    }

    public static DatabaseType getDB(DatabaseType type) {
        for (DatabaseType db : DatabaseType.values()) {
            if (db == type) {
                // niet helemaal zeker of dit werkt, maar dat moet je dan zelf even uitzoeken
                return db.getDB().getInstance();
            }
        }

        throw new Exception("Database not found");
    }
}


Dan kan je het dus zo aanroepen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
IDatabase db = DatabaseType.getDB(DatabaseType.MYSQL);


Je moet dan wel elke database een IDatabase laten implementeren
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.