Python Language Introduction aux motifs de conception et Singleton Pattern


Exemple

Les modèles de conception apportent des solutions aux commonly occurring problems de la conception de logiciels. Les modèles de conception ont été introduits pour la première fois par le GoF(Gang of Four) où ils ont décrit les modèles communs comme des problèmes qui se répètent et des solutions à ces problèmes.

Les modèles de conception ont quatre éléments essentiels:

  1. The pattern name est un descripteur que nous pouvons utiliser pour décrire un problème de conception, ses solutions et ses conséquences en un mot ou deux.
  2. The problem décrit quand appliquer le modèle.
  3. The solution décrit les éléments qui composent la conception, leurs relations, leurs responsabilités et leurs collaborations.
  4. The consequences sont les résultats et les compromis de l'application du modèle.

Avantages des modèles de conception:

  1. Ils sont réutilisables dans plusieurs projets.
  2. Le niveau architectural des problèmes peut être résolu
  3. Ils ont fait leurs preuves et ont fait leurs preuves, ce qui est l'expérience des développeurs et des architectes.
  4. Ils ont la fiabilité et la dépendance

Les modèles de conception peuvent être classés en trois catégories:

  1. Motif Créatif
  2. Motif structurel
  3. Motif comportemental

Creational Pattern - Ils sont concernés par la façon dont l'objet peut être créé et ils isolent les détails de la création d'objet.

Structural Pattern - Ils conçoivent la structure des classes et des objets afin qu'ils puissent composer pour obtenir des résultats plus importants.

Behavioral Pattern - Ils concernent l'interaction entre les objets et la responsabilité des objets.

Motif Singleton :

C'est un type de creational pattern qui fournit un mécanisme pour n'avoir qu'un objet et un objet d'un type donné et fournit un point d'accès global.

Par exemple, Singleton peut être utilisé dans des opérations de base de données, où nous voulons que l'objet de base de données conserve la cohérence des données.

la mise en oeuvre

Nous pouvons implémenter Singleton Pattern dans Python en créant une seule instance de classe Singleton et en servant à nouveau le même objet.

class Singleton(object):
    def __new__(cls):
        # hasattr method checks if the class object an instance property or not.
        if not hasattr(cls, 'instance'):
            cls.instance = super(Singleton, cls).__new__(cls)
        return cls.instance

s = Singleton()
print ("Object created", s)

s1 = Singleton()
print ("Object2 created", s1)

Sortie:

('Object created', <__main__.Singleton object at 0x10a7cc310>)
('Object2 created', <__main__.Singleton object at 0x10a7cc310>)

Notez que dans des langages comme C ++ ou Java, ce modèle est implémenté en rendant le constructeur privé et en créant une méthode statique qui effectue l'initialisation de l'objet. De cette façon, un objet est créé sur le premier appel et la classe retourne le même objet par la suite. Mais en Python, nous n'avons aucun moyen de créer des constructeurs privés.

Modèle d'usine

Le motif d'usine est également un Creational pattern . Le terme factory signifie qu'une classe est responsable de la création d'objets d'autres types. Il existe une classe qui agit en tant que fabrique et qui est associée à des objets et à des méthodes. Le client crée un objet en appelant les méthodes avec certains paramètres et fabrique l'objet du type souhaité et le renvoie au client.

from abc import ABCMeta, abstractmethod

class Music():
    __metaclass__ = ABCMeta
    @abstractmethod
    def do_play(self):
        pass

class Mp3(Music):
    def do_play(self):
        print ("Playing .mp3 music!")
    
class Ogg(Music):
    def do_play(self):
        print ("Playing .ogg music!")
    
class MusicFactory(object):
    def play_sound(self, object_type):
        return eval(object_type)().do_play()
    
if __name__ == "__main__":
    mf = MusicFactory()
    music = input("Which music you want to play Mp3 or Ogg")
    mf.play_sound(music)

Sortie:

Which music you want to play Mp3 or Ogg"Ogg"
Playing .ogg music!

MusicFactory est la classe de fabrique ici qui crée un objet de type Mp3 ou Ogg fonction du choix de l'utilisateur.