GoFデザインパターン ~Singletonパターン~
こちらを読みながら進める。
- 作者: 結城浩
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2004/06/19
- メディア: 大型本
- 購入: 51人 クリック: 762回
- この商品を含むブログ (397件) を見る
Singletonパターンとは
アプリケーションのスコープにおいてインスタンスがたった一つであることを保証するパターン。直接的なインスタンス生成を制限し、インスタンス生成を一箇所で管理することでSingletonパターンを実現する。
実装
Singletonクラス
増補改訂版Java言語で学ぶデザインパターン入門 のJavaの例ではSingletonクラスのコンストラクタのスコープをprivateにすることで直接的なインスタンス生成を制限してるが、Goでは構造体のスコープをパッケージに限定することでこれを実現する。
インスタンスの取得は GetInstance()
でのみ可能となる。
またインスタンス生成の関数を外部に公開せず、パッケージの変数初期化時にインスタンスを生成するようにしている。これはGoにおいて複数スレッドからSingletonクラスを生成される可能性を防ぐためで、他にはinit関数でインスタンスを生成してこれを実現することもできる。
package singleton type singleton struct{} var instance = newInstance() func newInstance() *singleton { return &singleton{} } func GetInstance() *singleton { return instance }
main
package main import ( "fmt" "github.com/saekis/go-design-pattern/5_singleton/singleton" ) func main() { for i := 1; i <= 5; i++ { go func() { singleton.GetInstance() }() } fmt.Scanln() }
実行結果
$ go run main.go Create new instance Exist instance Exist instance Exist instance Exist instance Exist instance