2011-04-10 2 views
0

i Vous voulez créer une classe et quelques méthodes dans cette classe qui interagissent avec la base de données. Beaucoup d'autres classes devraient appeler ces méthodes.solutions alternatives pour les méthodes statiques et Singleton dans la base de données Java

Q1: est-il possible de créer une seule instance de cette classe pour les autres?

Q2: Puis-je donner des méthodes comme statiques?

Q3: Existe-t-il une solution alternative pour static et singleton pour la base de données Java?

Répondre

1

Je n'ai pas encore utilisé de singletons dans Java. Cependant, il y a une assez bonne discussion sur le sujet à http://c2.com/cgi/wiki?JavaSingleton

Fondamentalement, vous allez rendre votre constructeur privé avec une variable d'instance finale statique privée. Ensuite, vous aurez besoin d'une méthode getInstance statique publique qui renvoie votre instance. Cela devient un peu plus compliqué si vous devez être sûr pour les threads, alors lisez l'article lié.

+0

S'il vous plaît corriger l'URL. Point de fuite. –

1

Vous pouvez également utiliser un ENUM avec une seule variable INSTANCE comme ci-dessous:

public enum EmployeeDAO { 
INSTANCE; 

static{ 
    //Initialize connection info etc. 
    init(); 
} 

private EmployeeDAO(){ 
    //Constructor stuff 
} 

public Employee getEmployeesById(int id){ 
      //Replace this with your data retrieval logic 
    return null; 
} 

public Employee getDeadBeatEmployees(){ 
      //Replace this with your data retrieval logic 
    return null; 
} 

public Employee getAllStars(){ 
      //Replace this with your data retrieval logic 
    return null; 
} 

public static void init(){ 

} 

}

public class Employee{} 

public class SillyCanuck{ 
    public static void main(String args[]){ 

    EmployeeDAO.INSTANCE.getEmployeeById(5); 
} 

} 
+1

Pouvez-vous élaborer? Cela compile absolument. INSTANCE est le singleton énuméré et ne sera jamais référencé à partir de cette classe. Il n'y a pas de tour ici. Ce n'est pas différent que de déclarer une 'instance finale statique' dans une classe java régulière, à l'exception du fait que le temps de compilation garantit qu'il ne peut jamais y avoir plus d'une instance. De plus, cet exemple n'a rien à voir avec la sérialisation. – nsfyn55

+0

D'accord. C'est une façon intéressante de définir un singleton. Et il a un avantage pour la sérialisation (le singleton traditionnel peut se retrouver avec plusieurs instances après la sérialisation). La seule chose que je n'aime pas, c'est static {} block: ça fait mal à tester; Singleton est toujours difficile à tester. –

+1

Pouvez-vous vérifier l'article wikipedia sur le modèle singleton et se référer à la section "Enum-way" puis reconsidérer votre -1 - http://en.wikipedia.org/wiki/Singleton_pattern#The_Enum-way. Je ne pense pas que je propage la désinformation, je fournis simplement une autre stratégie de mise en œuvre. DeeP devrait considérer sa situation et choisir la meilleure solution. – nsfyn55

Questions connexes