回答編集履歴

1

実装例を追記

2018/09/04 18:13

投稿

nakasho_dev
nakasho_dev

スコア2655

test CHANGED
@@ -13,3 +13,71 @@
13
13
  最近ではDagger2を使ってSingletonクラスを注入するような設計も多くなってきたと思います。
14
14
 
15
15
  * [Dagger2 入門解説](https://qiita.com/MoyuruAizawa/items/26cb093adbc778013467)
16
+
17
+
18
+
19
+
20
+
21
+ ### Singletonの実装例
22
+
23
+
24
+
25
+ 簡単なSingletonの実装例を示します。
26
+
27
+
28
+
29
+ ```Kotlin
30
+
31
+ class DataRepository private constructor() {
32
+
33
+ var userName: String? = null
34
+
35
+ var password: String? = null
36
+
37
+
38
+
39
+ companion object {
40
+
41
+ private var instance : DataRepository? = null
42
+
43
+
44
+
45
+ fun getInstance(): DataRepository {
46
+
47
+ if (instance == null)
48
+
49
+ instance = DataRepository()
50
+
51
+
52
+
53
+ return instance!!
54
+
55
+ }
56
+
57
+ }
58
+
59
+ }
60
+
61
+ ```
62
+
63
+
64
+
65
+ 上記のように作成し以下のような使い方ができます。
66
+
67
+ Applicationクラスのメンバ変数で保持しておけばガベージ対象にならないと考えます。
68
+
69
+
70
+
71
+ ```Kotlin
72
+
73
+ val repository = DataRepository.getInstance()
74
+
75
+ repository.userName = "hoge"
76
+
77
+ repository.password= "foo"
78
+
79
+ ```
80
+
81
+
82
+
83
+ ただ、この実装だと保存ができないので起動時にSharedPreferenceから保存しているUsernameとPasswordを取得して、UsernameとPasswordの更新があるたびにSharedPreferenceに書き込むという処理を実装したほうが良いと思います。