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だとどうなるのか?と興味本位で調べて見ましたが、以下の記事を見つけました。
マルチスレッドでSingltonを実践しようと思うと大変そう。。。
# ref
- 「増補改訂版 Java言語で学ぶデザインパターン入門」 結城浩(著)第11版
- http://marcio.io/2015/07/singleton-pattern-in-go/ 『Singleton Pattern in Go』