PythonでFactory Methodパターン
Factory Methodパターンを使うと,実際に作成するオブジェクトの種類や作成手順を隠蔽できます.
たとえば次の例だと,Counterオブジェクトが生成されるのか,それともCounterWithRealNumberオブジェクトが生成されるのかを,そのオブジェクトを利用する側では気にしなくてもよい.
#!/usr/bin/python class Counter(object): def __init__(self): self.count = 0; def increment(self): self.count += 1; def getValue(self): return self.count; class CounterWithRealNumber(Counter): def __init__(self): self.count = 0.0; class CounterFactory(object): def create(cls, arg = "default"): if arg == "real_number": return CounterWithRealNumber(); else: return Counter(); create = classmethod(create); if __name__ == '__main__': a = CounterFactory.create(); b = CounterFactory.create("real_number"); a.increment(); b.increment(); print "a.getValue() = " + str(a.getValue()); print "b.getValue() = " + str(b.getValue());
で,実行結果.
a.getValue() = 1 b.getValue() = 1.0