PHP de çok sık kullanıyorum ama Python ile Singleton yapıya daha önce hiç ihtiyaç duymamıştım. Hatırlat projesini güncellerken ayar ve veritabanı sınıflarında bir çok işlemin yeniden yapılması yerine böyle bir yapıyı kurmak daha mantıklı olacaktı. Daha önce cackephp de gördüğüm ve bazı projelerde kullandığım yöntemi Python için düzenledim. Öncelikle bir sınıf kaydediciye ihtiyacımız var. Aşağıdaki şekilde bu kaydediciyi oluşturuyoruz.
class ClassRegistry:
_classes = {}
@staticmethod
def getClass(key):
if ClassRegistry._classes.has_key(key):
return ClassRegistry._classes[key]
else:
raise Exception('Class not registered')
@staticmethod
def setClass(key, _class):
ClassRegistry._classes[key] = _class
Test sınıfı:
class A:
def __init__(self):
self.number = 1
print "initialize A"
Test kodları:
ClassRegistry.setClass('A', A())
# A sınıfı alınıyor
_class1 = ClassRegistry.getClass('A')
print _class1.number
_class1.number = 2
_class2 = ClassRegistry.getClass('A')
print _class2.number
_class2.number = 5
print _class1.number
print _class1
print _class2
Bu yöntem haricinde bir çok farklı yol mevcut. Onlardan bir taneside wikipedia üzerinde.
Pingback: Barış Yüksel » Blog Archive » Singleton Tasarım Deseni