Skip to content

Method: getInstance()

1: package example;
2:
3: import com.thoughtworks.xstream.converters.Converter;
4: import com.thoughtworks.xstream.converters.MarshallingContext;
5: import com.thoughtworks.xstream.converters.UnmarshallingContext;
6: import com.thoughtworks.xstream.io.HierarchicalStreamReader;
7: import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
8:
9: /**
10: * Simple Implementierung des Interfaces als Singleton.
11: */
12: public final class First implements BeispielInterface {
13:         private static First instance;
14:         
15:         private First() {
16:         }
17:         
18:         /**
19:          * @return Liefert die Singleton-Instanz des First-Objektes.
20:          */
21:         public static First getInstance() {
22:•                if (null == instance) {
23:                         instance = new First();
24:                 }
25:                 return instance;
26:         }
27:         
28:         /**
29:          * @return Liefert den First-Konvertierer, welcher benötigt wird, damit ein First-Objekt persistiert werden kann.
30:          * Dieses Objekt muss dem Persistierer vor dem Speichern/ Laden mittels
31:          * {@code Persistierer.addKonvertierer(First.getKonvertierer()) übergeben werden.
32:          */
33:         public static Converter getKonvertierer() {
34:                 return new FirstKonvertierer();
35:         }
36:         
37:         /**
38:          * Eine private Klasse, die es dem Singleton ermöglicht persistiert zu werden.
39:          */
40:         private static class FirstKonvertierer implements Converter {
41:                 @SuppressWarnings("rawtypes")
42:                 @Override
43:                 public boolean canConvert(final Class clazz) {
44:                         return clazz.equals(First.class);
45:                 }
46:                 
47:                 @Override
48:                 public void marshal(final Object value,
49:                                 final HierarchicalStreamWriter writer,
50:                                 final MarshallingContext context) {
51:                         // Kann für ein simples Singleton ohne weitere Attribute leer gelassen werden.
52:                         // Müssen Attribute jedoch mitgespeichert werden, ist dieser (sowie die unmarshal-Methode) Code etwa nach
53:                         // folgendem Vorbild zu erweitern: http://x-stream.github.io/converter-tutorial.html
54:                 }
55:                 
56:                 @Override
57:                 public Object unmarshal(final HierarchicalStreamReader writer, final UnmarshallingContext context) {
58:                         return First.getInstance();
59:                 }
60:         }
61: }