pythonによるデザインパターン[Singleton]

# Intro

この文章は結城 浩さんの「Java言語で学ぶデザインパターン入門」を、pythonで実装してみたサンプルコードです。

筆者の環境は以下の通りです。Python 3.6.3

まだ修行中の身なので間違いがあると思いますがご了承ください。 今回は「Singlton」です

# Explanation

本書のp58によると、 Singletonとは

インスタンスが1個しか存在しないことを保証するパターン

とあります。プログラムを書いている時に、時々classは使いたいが、そのインスタンスは1個しか作りたくないという時はありますよね?そのような時にSingltonの考え方を用いましょう。

# Practice

## Specification

class Singleton

を作成し、そのインスタンスがただ一つであることを保証してください。具体的には変数s1,s2にそれぞれclass Singletonを代入し、

s1 == s2 #True

となることを確かめてください。

## Sample Code

## Explanation

__instance = None

という変数を定義しておいて、そこにSingletonのインスタンスを代入します。

@staticmethod    
def get_instance():
if Singleton.__instance is None:
Singleton()
return Singleton.__instance

インスタンスを呼び出す時は、def get_instanceを用い、もし__instanceがNone(何も代入されてない)ならインスタンスを生成し、もしNoneでないなら、__instanceを返します。

重要なのはstatic method(もしくはclass method)にすることです。static methodなので呼び出す際は以下のように記述します。

Singleton.get_instance()

# Conclusion

簡単な割に、よく使うので覚えておきたいです。

pythonでは簡単に実装できますが、classが言語でサポートしていないgolangだとどうなるのか?と興味本位で調べて見ましたが、以下の記事を見つけました。

Singleton Pattern in Go

マルチスレッドでSingltonを実践しようと思うと大変そう。。。

# ref

--

--