source: ether_core/trunk/kit/interactifKit/zipContent/src/Singleton.java @ 784

Last change on this file since 784 was 6, checked in by cbipsl, 18 years ago

ajout rep ether

  • Property svn:executable set to *
File size: 2.8 KB
Line 
1/**
2 *      <p>Cette classe implémente le Singleton pattern exposé par
3 *      Gamma et al. dans leur livre désormais célèbre.</p>
4 *      <p>Elle permet d'instancier des singletons nommés et de gérer
5 *      tous les singletons d'une application.</p>
6 *
7 * @since JDK 1.2
8 * @version $Id: Singleton.java,v 1.1 2001/01/15 15:38:47 pn Exp $
9 * @author Phillip Link
10 */
11package fr.alcatel.ether.tools.singleton;
12
13// JDK
14import java.util.HashMap;
15import java.util.Set;
16import java.util.Iterator;
17
18public class Singleton {
19        /** Gestion de la mise au point */
20        protected static boolean _DEBUG = false;
21       
22        /** L'instance du singleton */
23        private static Singleton _uniqueInstance = null;
24
25        /** Collection de singletons nommés */
26        private static HashMap registry = new HashMap( );
27       
28        /**
29         *      <p>Construire l'unique instance de ce Singleton.</p>
30         *      <p>Accéder à l'instance du singleton par la méthode <code>instance</code>.</p>
31         *      <p>Cette méthode doit être implémentée par une classe dérivée.</p>
32         *      <p>Le constructeur est <code>protected</code>, ce qui permet aux autres classes
33         *      du paquetage d'y accéder. Afin d'assurer que seules les classes dérivées
34         *      y accèdent, cette classe doit être la seule du paquetage.</p>
35         *
36         *      @see instance
37         */
38        protected Singleton( ) {
39        }
40       
41        /**
42         *      <p>Obtenir une instance de singleton.</p>
43         *      <p>Cette méthode doit être implémentée par une classe dérivée.</p>
44         *
45         *      @return l'instance de l'objet voulu
46         */
47        public static Singleton instance( ) {
48                if ( _uniqueInstance == null ) {
49                        _uniqueInstance = new Singleton( );
50                }
51                return _uniqueInstance;
52        }
53
54        /**
55         *      <p>Obtenir une instance du singleton nommé.</p>
56         *
57         *      @param  le nom de l'objet voulu
58         *      @return l'instance de l'objet voulu
59         */
60        public static Singleton instance( String name ) {
61                return (Singleton)registry.get( name );
62        }
63
64        /**
65         *      <p>Obtenir une instance de singleton.</p>
66         *      <p>Cette méthode doit être appelée par une classe dérivée
67         *      lors de la construction, par exemple:</p>
68         *      <code>
69         *      <p>MySingleton( ) {</p>
70         *      <p>    Singleton.register( this.getClass().toString(), this );</p>
71         *      <p>}</p>
72         *      </code>
73         *
74         *      <p>N'oubliez pas de déclarer et initialiser une variable correspondant
75         *      au singleton:</p>
76         *      <code>
77         *      <p>public class MySingleton {</p>
78         *      <p>    private static MySingleton singleton = new MySingleton( );</p>
79         *      <p>    // autre code ..../p>
80         *      <p>}</p>
81         *      </code>
82         *
83         *      @return l'instance de l'objet voulu
84         */
85        public static void register( String name, Singleton singleton ) {
86                registry.put( name, singleton );
87                // Debugging
88                if ( _DEBUG ) {
89                        System.out.println( "Registering a new singleton" );
90                        System.out.println( "Current registry contains:" );
91                        Set singletons = registry.keySet( );
92                        for ( Iterator s = singletons.iterator(); s.hasNext(); ) {
93                                System.out.println( "- " + s.next() );
94                        }
95                }
96        }
97}
Note: See TracBrowser for help on using the repository browser.