Modèle intermédiaire
La conception orientée objet encourage la distribution des comportements à travers les objets, ce qui peut conduire à de nombreuses connexions entre les objets. Dans le pire des cas, chaque objet doit connaître tous les autres objets.
Bien que la division d'un système en de nombreux objets puisse améliorer la réutilisabilité, la surtension des objets interconnectées réduira sa réutilisabilité. Un grand nombre de relations de connexion empêchent un objet de fonctionner sans l'aide d'autres objets (le système se manifeste comme un ensemble indivisible ), et il est difficile de modifier les principaux modifications du comportement du système à l'heure actuelle. Parce que le comportement est distribué entre de nombreux objets, le résultat est que de nombreuses sous-classes doivent être définies pour personnaliser le comportement du système. Par conséquent, nous avons introduit le médiateur de l'objet médiateur :
Grâce à l'objet intermédiaire, le système de la structure du maillage peut être transformé en une structure d'étoile centrée sur l'intermédiaire . Chaque objet spécifique n'a plus de relation directe avec un autre objet, mais en est médié par l'objet intermédiaire. L'introduction de l'objet intermédiaire fait également que la structure du système ne subisse pas un grand nombre de modifications en raison de l'introduction de nouveaux objets.
Mode médiateur: également connu sous le nom de mode médiateur , utilise un objet de médiateur pour encapsuler l'interaction d'une série d'objets, de sorte que chaque objet n'a pas besoin d'être affiché et référencé les uns aux autres, desserrant ainsi le couplage et la modification de leurs interactions indépendamment :
(Source de l'image: modèle de conception: la base des logiciels orientés objet réutilisables) Conseils: Chaque collègue ne connaît que l'existence du médiateur et n'a pas besoin de savoir s'il existe d'autres collègues (ou comment les découpler). Il n'a qu'à envoyer un message au médiateur, puis à le transmettre à d'autres collègues ( le médiateur stocke toutes les relations collègues , et seul le médiateur sait combien / quels collègues sont là).
Implémentation de mode
Les Nations Unies transfèrent les déclarations de divers pays et intervient sur les relations avec chaque pays:
Les États envoient et reçoivent des messages au Conseil de sécurité des Nations Unies, qui «approprié» les demandes à terme entre les États pour l'action collaborative:
Collège
Classe de collègues abstraits, définissez les méthodes publiques de chaque collègue:
/ ** * @author jifang * @Since 16/8/28 4:22 PM. * / Public Résumé Classe Pays {Médiateur des Nations Unies protégées; nom de chaîne privé; Public Country (Unitednations Mediator, nom de chaîne) {this.mediator = médiateur; this.name = name; } public String getName () {Nom de retour; } Résumé protégé Déclare (String Msg); Résumé protégé réception (String msg);}--------------------------------------------------------------------------------
Concrétèleague
Collègues spécifiques:
• Chaque classe de collègues connaît son objet de médiateur.
• Chaque objet collègue communique avec son intermédiaire lorsqu'il doit communiquer avec d'autres collègues.
La classe USA étend Country {public USA (Unitednations Mediator, String Name) {Super (médiateur, nom); } @Override public void Declare (String msg) {mediator.declare (this, msg); } @Override public void recese (String msg) {System.out.println ("États-Unis reçus: [" + msg + "]"); }} classe Iraq étend le pays {public Iraq (Unitednations Mediator, String Name) {super (médiateur, nom); } @Override public void Declare (String msg) {mediator.declare (this, msg); } @Override public void recese (String msg) {System.out.println ("Iraq reçu: [" + msg + "]"); }} classe Chine étend le pays {Public China (Unitednations Mediator, nom de chaîne) {super (médiateur, nom); } @Override public void Declare (String msg) {mediator.declare (this, msg); } @Override public void reçoit (String msg) {System.out.println ("Chine reçue: [" + msg + "]"); }}--------------------------------------------------------------------------------
Médiateur
Médiateur abstrait: définissez une interface pour communiquer avec les objets de collègues:
Classe abstraite de la classe Unitednations {List protégée <Country> Pays = New LinkedList <> (); Registre du public public (pays de pays) {pays.add (pays); } public vide supprimer (pays du pays) {pays.remove (pays); } DÉCLARGE RÉSUMÉ RÉSUMÉ PROTÉRÉ (Pays Country, String MSG);}--------------------------------------------------------------------------------
Concédéateur
Intermédiaire spécifique:
• comprendre et maintenir ses collègues individuels;
• Réalisez le comportement collaboratif en coordonnant chaque objet de collègue (recevez des messages de collègues et en émettant des ordres à des collègues spécifiques).
Class UnitedNationsSecurityCouncil étend Unitednations {/ ** * Le Conseil de sécurité est médiatique au milieu * * @param country * @param msg * / @Override Protected vide Declare (country country, string msg) {for (country tocountry: pays) {if (! tocountry.equals (country)) {String name = country.getname (); tocountry.receive (nom + "Dites paisiblement:" + msg); }}}} S'il n'y a pas d'extension, le médiateur peut être combiné avec le concrètediateur en un.
•Client
Client de classe publique {@Test public void client () {UnitedNations Mediator = new UnitedNationsSecurityCouncil (); Country USA = New USA (médiateur, "USA"); Pays Chine = Nouvelle Chine (médiateur, "Chine"); Pays iraq = nouveau Irak (médiateur, "Irak"); Mediator.Register (USA); Mediateur.Register (Chine); Mediator.Register (Irak); USA.Declare ("Je veux attaquer l'Irak, qui se soucie de qui je suis pressé !!!"); System.out.println ("----------------"); China.Declare ("Nous condamnons fortement !!!"); System.out.println ("-----------------------"); Irak.Declare ("Allez, venez vous blesser !!!"); }}--------------------------------------------------------------------------------
résumé
L'émergence du médiateur réduit le couplage entre chaque collège, permettant au collègue et au médiateur d'être modifiés et réutilisés indépendamment. Parce que les objets collaborent, la médiation est considérée comme un concept indépendant et encapsulé dans un objet, l'attention est déplacée du comportement de chacun des objets lui-même à l'interaction entre eux, afin que le système puisse être vu d'un point de vue plus macro.
• Applicabilité
Le modèle intermédiaire est facile à appliquer dans le système et est facilement abusif dans le système. Lorsqu'un groupe d'objets complexes "plusieurs à plusieurs" apparaît dans le système, ne vous précipitez pas pour utiliser l'intermédiaire. Il est préférable de réfléchir d'abord à la question de savoir si la conception du système est raisonnable. Étant donné que le concrète de contrôle contrôle la centralisation, la complexité d'interaction devient la complexité de l'intermédiaire, ce qui rend l'intermédiaire plus complexe que n'importe quel concrètement. Il est recommandé d'utiliser le modèle intermédiaire dans les situations suivantes:
◦ Un groupe d'objets communique d'une manière bien définie mais complexe. Les interdépendances qui en résultent sont déroutantes et difficiles à comprendre.
◦ Un objet fait référence à de nombreux autres objets et communique directement avec ces objets, ce qui rend difficile la réutilisation de l'objet.
◦ Je souhaite personnaliser un comportement distribué entre plusieurs classes, mais ne voulez pas générer trop de sous-classes.
• Modes connexes
◦Facade est différent des médiateurs en ce qu'il résume un sous-système d'objet, fournissant ainsi une interface plus pratique. Son protocole est unidirectionnel, c'est-à-dire que les objets de façade font des demandes à cette classe de sous-système, mais autrement ne le peuvent pas. Au contraire, le médiateur fournit des comportements de collaboration qui ne sont pas pris en charge ou ne peuvent pas être soutenus par chaque objet collégial, et le protocole est multidirectionnel.
◦Collègue peut communiquer avec le médiateur à l'aide du mode observateur.
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.