17.12.2012 Views

Programmation PYTHON - Zenk - Security - Repository

Programmation PYTHON - Zenk - Security - Repository

Programmation PYTHON - Zenk - Security - Repository

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<strong>Programmation</strong> orientée objet<br />

CHAPITRE 14<br />

qui vérifie que toutes les instances d’une même classe ont toujours le même état,<br />

sans pour autant interdire la création de plusieurs instances.<br />

Factory, qui propose une interface de génération d’objets sans que le code appelant<br />

n’ait besoin de connaître forcément le type de classe à instancier.<br />

Singleton et Borg<br />

Figure 14–1<br />

Schéma UML de Singleton<br />

Le Singleton peut être utilisé dans tout contexte où l’on souhaite s’assurer qu’il ne<br />

peut pas y avoir pour une classe donnée deux instances actives dans le programme.<br />

Les connecteurs vers des ressources externes peuvent utiliser ce pattern pour s’assurer<br />

par exemple qu’il n’existe qu’une seule instance de la classe en charge de la connexion<br />

avec un serveur de base de données.<br />

Ce pattern peut être programmé en Python, en se basant sur la méthode de classe<br />

__new__(), appelée à chaque demande d’instanciation d’un objet.<br />

Singleton<br />

>>> class Singleton(object):<br />

... """ renvoie tjrs la même instance """<br />

... _ref = None<br />

... def __new__(cls, *args, **kw):<br />

... if cls._ref is None:<br />

... cls._ref = super(Singleton, cls).__new__(cls, *args, **kw)<br />

... return cls._ref<br />

...<br />

>>> class S(Singleton):<br />

... pass<br />

...<br />

>>> a = S()<br />

>>> b = S()<br />

>>> a is b<br />

True<br />

Toute classe dérivée de la classe Singleton bénéficie du mécanisme qui consiste à<br />

contrôler, au moment de l’instanciation d’un objet, qu’il n’existe pas déjà une instance<br />

en vie, par le biais de l’attribut statique _ref. Dans ce cas, l’objet n’est pas<br />

recréé et c’est cette instance qui est renvoyée.<br />

501

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!