Design Pattern
➢Design Pattern
Les Design Patterns ont plusieurs noms francisés qui permettent de les désigner. Les plus courants sont :"Motif de conception"; "Modèle de conception" ou "Patron de conception". La signification de ces termes est équivalente. Cependant, suivant les goûts des personnes, certains termes apparaissent plus parlants que d’autres.
En développement logiciel, un Design Pattern ,"Patron de Conception" est un arrangement caractéristique de modules reconnu comme bonne pratique en réponse à un problème de conception d'un logiciel. Il décrit une solution standard, utilisable dans la conception de différents logiciels.
Les avantages:
Les design patterns permettent de répondre à un problème de conception grâce à une solution éprouvée et validée par des experts. Ainsi on gagne en rapidité et en qualité de conception ce qui diminue également les coûts.
facilitent aussi la communication. Si un développeur annonce que sur ce point du projet il va utiliser le Design Pattern Observateur il est compris des informaticiens sans pour autant rentrer dans les détails de la conception (diagramme UML, objectif visé...).
DARK Patterns:
Le dark pattern fait référence à des pratiques de design d’interface ( application mobile, logicielle, page Web etc....) considérées comme non éthiques et destinées à obtenir l’action recherchée de la part de l’utilisateur.
Il a pour objectif de piéger l’utilisateur pour l’inciter à acheter un produit ou encore à souscrire à une assurance, réaliser une action qu’il n’est ni dans son intérêt, ni dans celui de la communauté. Le seul but est de tromper l’utilisateur et de l’amener à un objectif, en lui apportant un maximum de confusion.
Exemple :
collecter des données personnelles.
augmenter le panier moyen.
augmenter le trafic.
améliorer le taux de clic (sur une publicité).
fabrique abstraite:
Une fabrique abstraite encapsule un ensemble de fabrique ayant une thématique commune. Le code client crée une instance concrète de la fabrique abstraite, puis utilise son interface générique pour créer des objets concrets de la thématique.
Nous pouvons repérer les différents éléments depuis ce diagramme :
La fabrique abstraite contenant toutes les méthodes de création d'objets, le client peut seulement interagir avec.
Fabrique Concrete1 et Fabrique Concrete2 : Les fabriques dérivant de la fabrique abstraite, permettant d'instancier les objets souhaités.
Produit Abstrait A et Produit Abstrait B : Les classes abstraites des objets, elles contiennent les méthodes d'utilisation propre à chaque objet.
Produit A1/B1 et Produit A2/B2 : Les classes dérivant des produits abstraits, ce sont ces produits qui seront renvoyés au client.
Exemple d'une fabrique abstraite d'HTML en Java:
/* * GUIFactory Example */ public abstract class GUIFactory { public static GUIFactory getFactory() { int sys = readFromConfigFile("OS_TYPE"); if (sys == 0) return(new WinFactory()); return(new OSXFactory()); } public abstract Button createButton(); } class WinFactory extends GUIFactory { public Button createButton() { return(new WinButton()); } } class OSXFactory extends GUIFactory { public Button createButton() { return(new OSXButton()); } } public abstract class Button { private String caption; public String getCaption() { return caption; } public void setCaption(String caption) { this.caption = caption; } public abstract void paint(); } class WinButton extends Button { public void paint() { System.out.println("I'm a WinButton: "+ getCaption()); } } class OSXButton extends Button { public void paint() { System.out.println("I'm an OSXButton: "+ getCaption()); } } public class Application { public static void main(String[] args) { GUIFactory aFactory = GUIFactory.getFactory(); Button aButton = aFactory.createButton(); aButton.setCaption("Play"); aButton.paint(); } //output is //I'm a WinButton: Play //or //I'm a OSXButton: Play }
Exemple d'une fabrique abstraite d'HTML en Python :
#!/usr/bin/env python # -*- coding: utf-8 -*- #============================================================================== # Exemple d'une fabrique abstraite d’élément en Python #============================================================================== class RaceFactory(object): @staticmethod def get_factory(race_type): if race_type == 'automobile': return SpeedwayFactory() elif race_type == 'hippique': return HippodromeFactory() else: return StadiumFactory() def create_racer(self): raise NotImplementedError() class SpeedwayFactory(RaceFactory): def create_racer(self): return Car() class HippodromeFactory(RaceFactory): def create_racer(self): return Horse() class StadiumFactory(RaceFactory): def create_racer(self): return Human() class Racer(object): def __init__(self): self._nickname = None def start(self): raise NotImplementedError() @property def nickname(self): return self._nickname @nickname.setter def nickname(self, nickname): self._nickname = nickname class Car(Racer): def start(self): return "Vroum vroum (%s)" % self.nickname class Horse(Racer): def start(self): return "HiIi hIiI, cataclop (%s)" % self.nickname class Human(Racer): def start(self): return "C'est parti ! (%s)" % self.nickname if __name__ == '__main__': import random t = random.choice(['automobile', 'hippique', 'marathon']) a_factory = RaceFactory.get_factory(t) a_racer = a_factory.create_racer() a_racer.nickname = "Le Sans-Espoir" print(a_racer.start()) # Affiche # "Vroum vroum (Le Sans-Espoir)" # ou # "HiIi hIiI, cataclop (Le Sans-Espoir)" # ou # "C'est parti ! (Le Sans-Espoir)"
Good Luck
NB : " https://design-patterns.fr/introduction-aux-design-patterns#:~:text=Tout%20d'abord%2C%20les%20Design,de%20ces%20termes%20est%20%C3%A9quivalente. "




Commentaires
Enregistrer un commentaire