126 votes

Quelle est la différence entre le modèle de pont et le modèle de stratégie?

J'ai essayé de lire de nombreux articles sur dofactory, wikipedia et de nombreux sites. Je n'ai aucune idée de la différence entre eux.

Je sais que les deux découplent une abstraction de son implémentation et peuvent en changer à l'exécution.

Mais je ne sais toujours pas dans quelle situation je devrais utiliser une stratégie ou dans quelle situation je devrais utiliser bridge.

73voto

Kent Boogaart Points 97432

La sémantique. De wikipedia:

Le diagramme de classes UML pour la Stratégie motif est le même que le diagramme de la le Pont de modèle. Cependant, ces deux les modèles de conception ne sont pas les mêmes dans leur intention. Alors que la Stratégie modèle est conçu pour le comportement, l' Pont modèle est destiné pour la structure.

Le couplage entre le contexte et les stratégies est plus serré que le le couplage entre l'abstraction et la la mise en œuvre dans le Pont de modèle.

Si je comprends bien, vous êtes en utilisant le modèle de stratégie lorsque vous êtes à l'abstraction de comportement qui pourrait être fournie à partir d'une source externe (par exemple. config peut spécifier pour charger un plug-in de l'assemblée), et que vous utilisez le pont de modèle lorsque vous utilisez les mêmes constructions afin de rendre votre code un peu plus propre. Le code sera très similaire - vous êtes juste en appliquant des modèles pour des raisons un peu différentes.

62voto

alepuzio Points 702

Le Pont de modèle est un modèle structurel (COMMENT voulez-VOUS CONSTRUIRE UN COMPOSANT LOGICIEL?). Le modèle de Stratégie est un modèle dynamique (COMMENT VOULEZ-VOUS EXÉCUTER UN COMPORTEMENT DANS le LOGICIEL?).

La syntaxe est similaire, mais les buts sont différents:

  • Stratégie: vous avez plus de moyens pour faire une opération avec la stratégie que vous pouvez choix de l'algorithme d'exécution et vous pouvez modifier une Stratégie unique, sans beaucoup d'effets secondaires au moment de la compilation;
  • Pont: vous pouvez diviser la hiérarchie de l'interface et la classe de se joindre à lui avec une référence abstraite (voir explication)

12voto

MEER Points 61

Stratégie:

  • Contexte lié à la Stratégie: Le contexte de la Classe (éventuellement Abrégé, mais pas vraiment une interface! comme u souhaite encapsuler un comportement spécifique et non pas l'ensemble de la mise en œuvre) serait de savoir/contenir la stratégie de référence de l'interface et la mise en œuvre d'invoquer la stratégie de comportement.
  • L'intention est la capacité de swap de comportement au moment de l'exécution

    class Context {
    
         IStrategy strategyReference;
    
         void strategicBehaviour() {
    
            strategyReference.behave();
         }
    
    }
    

Pont

  • L'Abstraction ne sont pas liés à la mise en Œuvre: L'abstraction de l'interface (ou classe abstraite avec la plupart des comportement abstrait) ne sais pas/contenir la mise en œuvre de référence de l'interface
  • L'intention est de dissocier complètement l'Abstraction de la mise en Œuvre

    interface IAbstraction {
    
        void behaviour1();
    
        .....
    
    }
    
    interface IImplementation {
    
         void behave1();
    
         void behave2();
    
         .....
    
    }
    
    class ConcreteAbstraction1 implements IAbstraction {
    
          IImplementation implmentReference;
    
          ConcreteAbstraction1() {
    
               implmentReference = new ImplementationA() // Some implementation
    
          }
    
          void behaviour1() {
    
                implmentReference.behave1();
    
          }
    
          .............
    
    }
    
    class ConcreteAbstraction2 implements IAbstraction {
    
          IImplementation implmentReference;
    
          ConcreteAbstraction1() {
    
               implmentReference = new ImplementationB() // Some Other implementation
    
          }
    
          void behaviour1() {
    
                implmentReference.behave2();
    
          }
    
          .............
    
    }
    

2voto

Robert Gould Points 29406

En ajoutant à la réponse de willcodejavaforfood, ils peuvent être identiques, dans la mise en œuvre. Cependant, vous utilisez une stratégie pour échanger des stratégies telles que la stratégie de tri, tandis que vous utilisez un pont pour relier les implémentations de deux objets, par exemple un encapsuleur de base de données, et une carte réseau afin que le code client puisse utiliser la même API. Donc, la dénomination dit tout

1voto

willcodejavaforfood Points 20365

À partir du wiki sur la Stratégie de modèle

Le diagramme de classes UML pour la Stratégie motif est le même que le diagramme de la le Pont de modèle. Cependant, ces deux les modèles de conception ne sont pas les mêmes dans leur intention. Alors que la Stratégie modèle est conçu pour le comportement, l' Pont modèle est destiné pour la structure.

Le couplage entre le contexte et les stratégies est plus serré que le le couplage entre l'abstraction et la la mise en œuvre dans le Pont de modèle.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X