Quelle est la différence entre les patrons de conception Bridge et Adapter?
Réponse
Trop de publicités?
Arnab Dutta
Points
125
Il y a plein de réponses Pour distinguer entre Adapter et Bridge. Mais comme les gens recherchent des exemples de code, je donnerais un exemple du Pattern de Conception Adapter élaboré dans une histoire chronologique :
//---------------------------------------Fournisseur/Provider Externe--------------------------------
//Adaptee | RussianTankInterface est l'adapté | l'adapté vit dans son propre monde de rêve et se moque de toute autre classe ou interface
RussianTankInterface smerch9K58 = new RussianTank("L'artillerie russe achetée par l'Inde en octobre 2015");
smerch9K58.aboutMyself();
smerch9K58.stuff();
smerch9K58.rotate();
smerch9K58.launch();
//---------------------------------2016 : L'Inde fabrique le Bharat52 ------------------------------
//Client_1 :: IndianTank
EnemyAttacker bharat52Attacker = new IndianTank("Char construit en Inde livré à l'armée en juillet 2016");
// se comporte normalement -------------------------(1)
bharat52Attacker.aboutMe();
bharat52Attacker.load();
bharat52Attacker.revolve();
bharat52Attacker.fireArtillery();
//---------------------------------2019 : L'Inde fabrique le Pinaka, et réfléchit à une fusion avec la technologie russe - donc une adaptation est nécessaire ------------------------------
//Client_2 :: IndianTank
EnemyAttacker pinakaAttacker = new IndianTank("Char construit en Inde en 1998 mis à jour_v1 le 9 septembre 2019");
#####----Coalition-Bilatérale se produit----##
##### Inde : Je veux une fusion de technologie d'artillerie avec
##### 1) Matériaux et cerveau indiens mais
##### 2) Technologie de mouvement de pièces de machine russe
##### Russie : Donne-moi ton Interface - au maximum nous pouvons aider en fournissant un Adaptateur
//---------------------------------------Fournisseur/Provider Externe-----------------------------------
//Adaptateur :: RussianTechnologyAdapter | La Russie obtient uniquement l'interface EnemyAttacker de l'Inde & crée RussianTechnologyAdapter
RussianTechnologyAdapter russianTechnologyAdapter = new RussianTechnologyAdapter(smerch9K58);
//Cible | EnemyAttacker était initialement ClientInterface mais devient plus tard la Cible à mesure que l'histoire évolue | <- le client possède cette Interface
EnemyAttacker dhanushAttacker = russianTechnologyAdapter;
#####----La Russie tient parole----##
##### Russie à l'Inde : Tiens, prends Dhanush, une enveloppe autour de notre adaptateur encapsulé, et branche tout ce qui est conforme à ton EnemyAttacker.
##### Inde : Merci beaucoup!
//--------------------------------- 2020 : L'Inde retourne heureuse avec dhanushAttacker---------------------------------------
//Client_2 - comportement adapté -------------------------(2)
dhanushAttacker.setNavigationCapability(pinakaAttacker.getCuttingEdgeNavigableTargets());
dhanushAttacker.aboutMe(); //appelle l'instance russe -> aboutMyself()
dhanushAttacker.load(); //appelle l'instance russe -> stuff()
dhanushAttacker.revolve(); //appelle l'instance russe -> rotate()
dhanushAttacker.fireArtillery(); //appelle l'instance russe -> launch()
Remarquez attentivement :
- La même API dans (1) & (2) se comporte différemment
- L'Inde peut insérer son cerveau dans le wireFrame de la Russie par exemple
dhanushAttacker.setNavigationCapability(pinakaAttacker.get(..))
Points remarquables
Le côté Client possède :
- L'Appelant / Utilisateur(utilise Adapter plus tard)/Client
- ClientInterface (alias Cible)
Partagé plus tard :
- Interface Client (devient Cible après le partage)
Le côté Récepteur possède :
- Adaptateur (partagé directement ou en tant qu'enveloppe )
- Adapté
En espérant que quelqu'un donne aussi un exemple pour Bridge :)
- Réponses précédentes
- Plus de réponses
0 votes
Peut-être envisager d'offrir une édition de clarification pour orienter la discussion sur l'endroit où vous pensez avoir besoin d'utiliser l'un ou l'autre.
0 votes
stackoverflow.com/questions/350404/…
0 votes
Aucune explication ici ne remplacera jamais la lecture de Design Patterns: Elements of Reusable Object-Oriented Software