Dans ce tutoriel, nous appendrons pourquoi utiliser le design pattern Adaptateur.
Nous le définirons puis l’analyserons au travers d’un exemple pratique.
Définition :
Adaptateur : Patron de conception structurelle qui permet de convertir l’interface d’une classe en une autre que le client attends. L’adaptateur fait fonctionner un ensemble de classe qui n’auraient pas pu fonctionner sans lui, due à une incompatibilité d’interface.
Exemple pratique :
Nous partons en voyage et souhaitons connecter une lampe qui à une prise européenne à une prise secteur américaine.
Les prises ne sont pas compatibles. Nous devons utiliser un adaptateur pour les relier.
Prise secteur américaine
Commençons par créer, une classe pour simuler la prise secteur.
class USAPowerPlug: def __init__(self): self.type = "G" def connect_to_usa_elec_network(self): print("Get electricity from the USA network")
Lampe
Ensuite, nous créeons une classe pour simuler la lampe qui peut se brancher seulement à une prise secteur française.
class MyLamp: """ My lamp is French, I want to use it during my trips but can only connect on Europe plugs """ def __init__(self, electricity_plug): if electricity_plug.type == "C": electricity_plug.connect_to_eu_elec_network() print("Plugged ...") else: print("Power plug is not compatible")
Adaptateur
Afin de rendre la lampe compatible avec une prise secteur étrangère, nous définissons un adaptateur universel.
class Adapter: def __init__(self, obj, **adapted_methods): """We set the adapted methods in the object's dict""" self.obj = obj self.__dict__.update(adapted_methods) def __getattr__(self, attr): """All non-adapted calls are passed to the object return getattr(self.obj, attr) def original_dict(self): """Print original object dict""" return self.obj.__dict__
A présent, essayons de brancher la lampe.
def main(): usapowerplug = USAPowerPlug() # I can't plug my lamp, because the plug is not compatible onelamp = MyLamp(usapowerplug) # Now, I use the adapter and can connect my lamp""" frenchpowerplug = Adapter(usapowerplug, type="C", connect_to_eu_elec_network=usapowerplug.connect_to_usa_elec_network) lamp = MyLamp(frenchpowerplug) main()
Conclusion
Ainsi s’achève ce tutoriel, ajoutez ci-nécessaire vos questions en commentaire.